我不完全確定它爲什麼適用於你的班級,但不是原來的object
班。我假設當你的類被初始化時,它會創建__dict__。
使用此代碼:
class Test(object):
def __init__(self):
pass
def main():
print 'OBJECT:', dir(object())
print
print 'TEST:', dir(Test())
return
想出了這樣的輸出:
OBJECT: ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']
TEST: ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']
正如你所看到的,__dict__,__module__和__weakref__都在測試對象,但不是基本對象
直接用'__dict__'擺弄幾乎總是不需要的,也是一個壞主意。動態屬性名稱通常可以更好地作爲字典鍵來完成,但在少數情況下是合理的 - 但在這些情況下您可以使用'setattr'。 – delnan 2011-05-10 18:37:41