2012-11-09 52 views
4

可能重複的區別:
inspect.getmembers() vs __dict__.items() vs dir()什麼是目錄(個體經營)和自我.__ dict__

class Base(): 
    def __init__(self, conf): 
     self.__conf__ = conf 
     for i in self.__dict__: 
      print i,"dict" 
     for i in dir(self): 
      print i,"dir" 

class Test(Base): 
     a = 1 
     b = 2 

t = Test("conf") 

輸出是:

__conf__ dict 
__conf__ dir 
__doc__ dir 
__init__ dir 
__module__ dir 
a dir 
b dir 

誰能解釋有點關於這個?

+1

我不知道你是如何得到這個輸出的。 「dict」和「dir」來自哪裏? – kindall

+0

@kindall我只是修復了代碼'print i',dict「'和print i」,dir「' –

+0

據我所知,'__conf__'在python中沒有特殊含義。除非用於python標準賦予的特殊含義,否則不應該使用變量(或屬性)名稱'__something__',因爲這些變量是爲未來版本的python保留的。 – mgilson

回答

7

對象的__dict__存儲實例的屬性。您的實例的唯一屬性是__conf__,因爲它是__init__()方法中唯一設置的屬性。 dir()返回實例及其類和其父類的「有趣」屬性的名稱列表。其中包括您的Test類中的ab類以及Base類中的__init__,以及Python自動添加的其他一些屬性。

類屬性存儲在每個類的__dict__中,因此dir()正在執行的是遍歷繼承層次並收集每個類的信息。

+0

q = [python] +%2Bdir +%2B__dict __ +%2Bdifference&submit = search)在回答之前。 –

+0

很好的答案,尤其是第一部分。看到[這個答案](http://stackoverflow.com/questions/14361256/whats-the-biggest-difference-between-dir-and-dict-in-python/14361362#14361362)詳細解釋了「有趣的實例的屬性「。 – Peterino

相關問題