我使用__dict__
属性在运行时将可调用对象添加到类A的实例中。在某些时候,我想从我的实例中删除所有添加的对象。我考虑将初始__dict__
属性存储在成员_orgDict
中,然后再执行self.__dict__ = self._orgDict
。我想知道是否:
答案 0 :(得分:2)
你的意思是del声明?
del(instance.attribute)
答案 1 :(得分:1)
快速测试显示重新分配实例__dict__
似乎有效:
>>> class B(object):
pass
>>> b = B()
>>> b.b = 6
>>> b.b
6
>>> b.__dict__ = {}
>>> b.b
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
b.b
AttributeError: 'B' object has no attribute 'b'
但是,我不确定这是否有保证,或者它是否恰好起作用。特别是在支持非C蟒蛇方面,你可能要小心。
答案 2 :(得分:0)
是。可以通过赋值覆盖(删除)对象。这是一个例子。
>>> class callable_objects:
def __init__(self, name, fame=None):
self.name = name
self.fame = fame
def _name(self):
if self.name[0] in ["a","b","c","d","e"]:
self._fame("1")
else:
self._fame("2")
def _fame(self, ifame):
if ifame == "1":
print "Ur fame is bad"
else:
print "Ur fame is very bad"
>>> c = callable_objects("ameet")
>>> callable_objects.__dict__
{'__module__': '__main__', '_fame': <function _fame at 0x02B5C370>, '__doc__': None, '__init__': <function __init__ at 0x02B5C330>, '_name': <function _name at 0x02B5C2F0>}
>>> c.__dict__
{'name': 'ameet', 'fame': None}
>>> callable_objects.__dict__ = c.__dict__
>>> callable_objects.__dict__
{'name': 'ameet', 'fame': None}