1

__dict__我在运行时使用该属性将可调用对象添加到 A 类的实例中。在某些时候,虽然我想从我的实例中删除所有添加的对象。我考虑过将初始__dict__属性存储在一个成员中_orgDict,然后再执行self.__dict__ = self._orgDict。我想知道是否:

  • 这有效吗?
  • 删除的对象真的被删除了还是不再包含在我的实例中?
4

3 回答 3

5

你的意思是del语句?

del(instance.attribute)
于 2012-06-08T11:27:49.043 回答
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 Python 方面,您可能需要小心。

于 2012-06-08T11:42:35.447 回答
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}
于 2012-06-08T12:21:56.937 回答