1

此代码按预期工作,但会导致内存泄漏吗?

class Method(object):
    method = []
    def call(self,method,*args,**kwargs):
       kwargs.update({'access_token': self.access_token})
       print method,args,kwargs
    def __getattr__(self,name):
       cp = Method()
       cp.access_token = self.access_token
       cp.method = self.method + [name]
       return cp
    def __call__(self,*args,**kwargs):
       return self.call('.'.join(self.method),*args,**kwargs)

class Api(Method):
    access_token = 'setups on init'

a=Api()
a.get()
a.set(data=1)

或者Method实例调用后会去垃圾吗?

4

1 回答 1

2

你没有内存泄漏。

您只是返回一个可调用对象;当您不再引用它时,它将被自动清理。

除了局部变量名称之外,该__getattr__方法不再添加对该对象的任何引用。当函数退出时,该引用被清除。

a.get()and表达式仅持有对该a.set()对象的引用,时间足以查找__call__方法并调用它。当__call__方法返回时,对Method()实例的引用数下降到 0 并且对象被清除。

于 2013-08-13T11:26:37.857 回答