如何重新发起“课堂”;它的静态变量

时间:2018-06-29 09:12:11

标签: python class

我说的是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__
{}

该怎么办? 拥有该功能的副本将无法正常工作(静态引用已被交叉引用),删除和导入也将失败,而且效果也不佳。

3 个答案:

答案 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'