__dict__
我在运行时使用该属性将可调用对象添加到 A 类的实例中。在某些时候,虽然我想从我的实例中删除所有添加的对象。我考虑过将初始__dict__
属性存储在一个成员中_orgDict
,然后再执行self.__dict__ = self._orgDict
。我想知道是否:
- 这有效吗?
- 删除的对象真的被删除了还是不再包含在我的实例中?
__dict__
我在运行时使用该属性将可调用对象添加到 A 类的实例中。在某些时候,虽然我想从我的实例中删除所有添加的对象。我考虑过将初始__dict__
属性存储在一个成员中_orgDict
,然后再执行self.__dict__ = self._orgDict
。我想知道是否:
你的意思是del语句?
del(instance.attribute)
快速测试表明重新分配实例__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 Python 方面,您可能需要小心。
是的。可以通过赋值覆盖(删除)对象。这是示例。
>>> 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}