Python:从实例中删除成员

时间:2012-06-08 11:12:14

标签: python reflection

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

  • 这个有用吗?
  • 删除的对象是否已被删除或仅仅不包含在我的实例中?

3 个答案:

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