动态类属性生成

2024-04-23 14:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码按预期工作,但是否会导致内存泄漏?你知道吗

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)

或者方法实例调用后会变成垃圾吗?你知道吗


Tags: 代码nameselftokenapireturnaccessdef
1条回答
网友
1楼 · 发布于 2024-04-23 14:46:58

你没有内存泄漏。你知道吗

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

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

a.get()a.set()表达式只保存对对象的引用足够长的时间来查找__call__方法并调用它。当__call__方法返回时,对Method()实例的引用数下降到0,并且对象被清除。你知道吗

相关问题 更多 >