【发布时间】:2010-10-10 07:42:06
【问题描述】:
我有一个类,我在其中动态添加一些属性,并且在某些时候我想在没有添加属性的情况下将该类恢复到原始状态。
情况:
class Foo(object):
pass
Foo.x = 1
# <insert python magic here>
o = Foo() # o should not have any of the previously added attributes
print o.x # Should raise exception
我最初的想法是创建原始类的副本:
class _Foo(object):
pass
Foo = _Foo
Foo.x = 1
Foo = _Foo # Clear added attributes
o = Foo()
print o.x # Should raise exception
但由于 Foo 只是对 _Foo 的引用,因此任何属性也会添加到原始 _Foo 中。我也试过了
Foo = copy.deepcopy(_Foo)
万一这会有所帮助,但显然没有。
澄清:
用户不需要关心类是如何实现的。因此,它应该具有与“正常定义”类相同的功能,即内省、内置帮助、子类化等。这几乎排除了任何基于 __getattr__
【问题讨论】:
-
请问您为什么觉得这很有用?
-
因为我有一个类,当导入模块时,我会在其中动态添加带有默认前缀的方法(例如,在所有添加的内容前添加“m_”)。用户可能想要使用其他前缀,所以我需要“重新初始化”类。
-
这听起来是个非常糟糕的想法。
-
@Glenn Maynard:这听起来像是一个非常没有建设性的评论,绝不会增加讨论。
-
这是不言而喻的,抱怨我觉得没有必要解释一些似乎不言而喻的事情是非常没有建设性的,绝不会增加讨论。也许你不应该对刚刚回答你问题的人发牢骚。
标签: python