此代码按预期工作,但是否会导致内存泄漏?你知道吗
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)
或者方法实例调用后会变成垃圾吗?你知道吗
你没有内存泄漏。你知道吗
您只是返回一个可调用对象;当您不再引用它时,它将被自动清除。你知道吗
__getattr__
方法除了局部变量名之外,不会再向对象添加任何引用。当函数退出时,该引用被清除。你知道吗a.get()
和a.set()
表达式只保存对对象的引用足够长的时间来查找__call__
方法并调用它。当__call__
方法返回时,对Method()
实例的引用数下降到0,并且对象被清除。你知道吗相关问题 更多 >
编程相关推荐