我说的是Class,而不是对象。原因是我创建了一个生成一些对象的类,但是出于效率方面的考虑,我确实为其一些方法分配了一些静态变量。在某些情况下,我想重新初始化Class,即将其所有静态变量设置为其初始值(如果有)。如何做到这一点而又不逐一重新分配每个变量?例如,如果我们具有以下Class:
class tst:
def lol(self):
self.lol.__dict__['static_magic'] = True
分配一些对象后:
# A demonstration of how these work and are the same if one is activated.
>>> a = tst()
>>> b = tst()
>>> a.lol()
>>> a.lol.__dict__
{'static_magic': True}
# Then when running object b (without lol()) has also the variable static magic.
>>> b.lol.__dict__
{'static_magic': True}
然后,我决定是时候重新初始化其所有静态变量,并从乞求开始分配了。我想要的是以下内容。
>>> c = tst()
>>> c.lol.__dict__
{}
该怎么办? 拥有该功能的副本将无法正常工作(静态引用已被交叉引用),删除和导入也将失败,而且效果也不佳。
答案 0 :(得分:1)
如果要修改实例而不是类,该如何简化呢?
class tst:
def __init__(self):
self.statics = {}
def lol(self):
self.statics["lol"] = {"static_magic" : True}
这里有live example
答案 1 :(得分:1)
只需添加一个clear
方法:
class tst:
def lol(self):
self.lol.__dict__['static_magic'] = True
def clear(self):
self.lol.__dict__.clear()
a=tst()
b=tst()
a.lol()
print(a.lol.__dict__)
print(b.lol.__dict__)
c=tst()
c.clear()
print(a.lol.__dict__)
print(b.lol.__dict__)
print(c.lol.__dict__)
输出:
{'static_magic': True}
{'static_magic': True}
{}
{}
{}
答案 2 :(得分:1)
没有什么可以阻止您将类定义放入函数中,而只是重新运行该函数以重新创建类。
>>> def make_foo():
... global Foo
... class Foo:
... X = 'original value'
...
>>> make_foo()
>>> Foo.X
'original value'
>>> Foo.X = 'new value'
>>> Foo.X
'new value'
>>> make_foo()
>>> Foo.X
'original value'