2017-04-17 169 views
1

「在Python每一件事情都是一個對象」對象已在蟒蛇

所以,應該所有對象必須有屬性和方法既沒有屬性也沒有方法?

我讀下面statemts在教程網站,你可以給在具有既沒有屬性也沒有方法蟒蛇例如預先定義的對象?

有些對象既沒有屬性也沒有方法

+0

大概你的意思是http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html,所以你有沒有讀過第三章承諾的後續行動? – jonrsharpe

+0

可能重複[是否所有的東西都是python中的對象,像ruby?](http://stackoverflow.com/questions/865911/is-everything-an-object-in-python-like-ruby) – direprobs

回答

1

一切都在Python確實是一種對象,這是事實。即使是班級本身也被認爲是對象,他們確實是內建類type的產物,這也不足爲奇。但在大多數情況下,對象幾乎肯定會繼承屬性,包括方法或數據。

因此,所有的對象都應該有屬性和方法嗎?

不一定所有對象都有自己的屬性。例如,一個對象可以從它的類和它的類的超類繼承這個屬性,但是這個屬性或方法不一定存在於這個實例的名字空間字典中。事實上,情況的命名空間可以是空如下所示:

class Foo: 
    pass 

a = A() 
print(a.__dict__) 

a這裏沒有任何屬性,除了那些從它的類繼承的,所以如果您通過內置的屬性,檢查其命名空間__dict__,你會發現命名空間是一個空的字典。但是你可能會想知道a.__dict__是否屬於a?區分級別屬性 - 從類或其超類繼承的屬性和實例屬性 - 屬於該實例且通常位於其名稱空間__dict__中的屬性。

你可以給一個既沒有屬性也沒有方法的預定義對象的例子嗎?

如果你的意思是預定義的對象,一個內置對象,我無法想象這樣的場景。同樣,即使對象本身沒有屬性,如果在大多數情況下有超類,那麼就會有從它的類或類的超類繼承的屬性。也許我在這裏猜測,本教程要求您創建不爲其對象分配屬性的類,就像我上面包含的代碼一樣。

這已經回答你的問題好:Is everything an object in python like ruby?

1

有模仿,沒有屬性的一個Python對象hackish的方式。

class NoAttr(object): 
    def __getattribute__(self, attr): 
     raise AttributeError("no attribute: %s" % attr) 

    def __setattr__(self, attr, value): 
     raise AttributeError("can't set attribute: %s" % attr) 

    def __delattr__(self, attr): 
     raise AttributeError("no attribute: %s" % attr) 

a = NoAttr() 

這個實例a,對於所有意圖和目的,在純Python,表現如同沒有屬性(你可以嘗試在它hasattr)的對象。

在C擴展中可能有一種低級別的方法,通過在C中實現一種類型,從病理上阻止Python的對象實現工作。無論如何,這裏的保證金太小,不適合寫一個。

沒有屬性的預定義對象將會破壞預定義它的目的。