2017-07-06 73 views
0

如果我已经通过了一个方法如下:如何获取方法的父对象?

my_function(MyObject.method) 

我可以从里面my_function访问MyObject,这样我可以打电话MyObject.some_other_method()

请区分在类级别和实例级别上是否可以这样做。

+0

关于一类级:无,除非'method'是一类方法。 –

+0

不是每个方法都有一个类:lambda表达式,嵌套函数等一些方法没有类... –

回答

0

我肯定不会推荐这样做,但附近有一座小戳后,您可以访问的功能被绑定到对象:

class C: 
    def __init__(self, _id): 
     self._id = _id 
    def a(self): 
     pass 
    def b(self): 
     print("b: {}".format(self._id)) 

c = C('test') 


# you can access the object the function is bound to with __self__ 
c.a.__self__.b() 

def my_function(fn): 
    fn.__self__.b() 


my_function(c.a) # "b: test" 
+0

这实际上非常有用。你为什么不推荐它?这是非常好的快捷方式,为我节省了很多额外的代码 – cjm2671

+0

可能是因为如果你需要它,你可能试图解决一个x/y问题 - 无论如何,它可能是值得看看你的设计,看看它是否可以改进。但我不知道你的具体问题,所以这可能是你最好的选择。 – Baldrickk

+1

显然取决于用例,但任何依靠能够触及未知来执行看不见的父代码的代码在最坏情况下都会变得脆弱而危险。话虽如此,最好不要在合法(有限)情景下成为教条! –