2011-07-06 33 views
1
class Foo: 
    pass 

>>> f = test.Foo() 

讓我們看看到類實例...dir()__class__屬性?

>>> dir(f) 
['__add__', [__class__] ...] 

哦!讓我們看看到類實例元數據...

>>> dir(f.__class__) 
['__add__', [__class__] ...] 

嗯......期待的__class__屬性;但返回的f

試圖一擊和審判的屬性...

>>> dir(f.__class__.__class__) 
['__abstractmethods__', '__base__' ...] 

嗯......爲什麼兩次的魅力呢?

+0

我有一種感覺,這種行爲取決於你的Python版本。我在2.6中獲得了不同的行爲。你使用什麼版本? – Triptych

+0

新風格類和舊風格類在這方面的結果也有所不同。 –

+0

@Triptch:使用2.7.2 –

回答

6

dir(f)dir(f.__class__)顯示了兩個不同事物的屬性。只是你的空對象與它自己的類具有相同的屬性。試試這個:

>>> class Foo: 
... def __init__(self): 
... self.a = 17 
... 
>>> f = Foo() 
>>> 'a' in dir(f) 
True 
>>> 'a' in dir(f.__class__) 
False 
+0

好吧!但是'dir(f .__ class __)'和'dir(f____ class __.__ class __)'有什麼區別呢? (我知道'__name__'和'__bases__'是'__class__'的屬性,但是我沒有在'f____ class__'中看到它) –

+1

這是一個不幸的事實,一個對象可以擁有dir()不報告的屬性。 –

相關問題