一個非常基本的問題。爲什麼參數傳遞給__getattribute__無法識別?
我有一些虛擬類:
class SomeClass:
""" just a docstring"""
a = 5
目錄(SomeClass的),返回與此類關聯以下屬性:
>>> dir(SomeClass)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_s
ubclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclas
shook__', '__weakref__', 'a']
>>>
我注意到,如果我打個電話到SomeClass的.__ getattribute__ ,即使我通過一個參數(它說它需要),錯誤消息說我沒有通過任何參數。
>>> SomeClass.__getattribute__('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected 1 arguments, got 0
>>>
注 - 這並不是說我有一個用例爲希望以這種方式來調用__getattribute__。(事實上,這似乎是不正確的,我想將它稱爲SomeClass的實例,而不是它的工作)。 我只是好奇__getattribute__的行爲:爲什麼錯誤消息說它有0個參數,當我實際上傳遞參數?我並不質疑我的用法是不正確的 - 只是,爲什麼__getattribute__不能識別它是通過了一個參數呢?
我注意到__getattribute__被列爲'slotwrapper'。這是否與它有關?我很難弄清楚調用slotwrapper和調用函數之間的真正區別。由於我調用它的方式,這個slotwrapper拋棄了我通過它的論點嗎?
>>> SomeClass.__getattribute__
<slot wrapper '__getattribute__' of 'object' objects>
>>>
非常感謝您的解釋。我對錯誤信息本身非常困惑。這是一個與\ __ setattr \ __類似的問題,如果我在調用這個(不正確的)方法時傳遞了兩個參數,那麼錯誤消息表明它需要2個參數,但只接收1個。(看起來它應該真的期待3個參數 - 實例,要設置的屬性的名稱以及將其設置爲的值)。 – ffConundrums
我懷疑是假的錯誤信息是因爲那些是用C編寫的方法(你從'object'繼承)。內建的方法有點奇怪。如果你用Python編寫你自己的方法,如果調用不正確,它會給出一個合適的錯誤信息。 – Blckknght