1
我想動態地分配一個函數__del__
的一個類的實例,以便它在該對象上使用dir()時被調用。我需要__dir__
對每個類的實例都是唯一的。作爲一個剝離下來的例子,我曾嘗試:動態分配函數__dir__的實例
import types
class Foo(object):
def __init__(self, arg):
def __dir__(self):
print "in __dir__"
return [arg]
self.__dir__ = types.MethodType(__dir__, self, self.__class__)
foo = Foo('bar')
print dir(foo)
print
print foo.__dir__()
此打印:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
in __dir__
['bar']
如果我不是這樣做:
class Foo(object):
def __dir__(self):
print "in __dir__"
return ['bar']
foo = Foo()
print dir(foo)
輸出:
in __dir__
['bar']
如預期的那樣,但不能爲每個i定製班級的真實性。有任何想法嗎?
這將在正常情況下工作。不過,我的情況有點奇怪,因爲我實際上需要在'__init__'期間調用dir(),並且當時我需要得到正常的dir()輸出(沒有自己定義的__dir__')。在那次調用之後,我想定義我的'__dir__'方法。 – Tommy 2010-11-04 03:35:40
dir(self .__ class__)就是答案!我沒有想過這樣做。我甚至不需要在實例屬性中存儲任何東西。 – Tommy 2010-11-04 04:21:17
我必須這樣做的原因是因爲我已經重寫了'__getattr__',因此,當訪問實例的屬性並且該屬性不存在時,將爲該屬性自動創建預定類型的對象。 – Tommy 2010-11-04 04:22:23