1

プロパティを使用して、実行時にクラス A のインスタンスに呼び出し可能なオブジェクトを追加し__dict__ます。ただし、ある時点で、追加したすべてのオブジェクトをインスタンスから削除したいと考えています。__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 に答える