我是python的新手。我認爲非類對象沒有基地屬性,而類對象確實有它。但我不確定。 python \ cpython如何檢查對象是否爲非類或類,並在屬性訪問期間相應地將正確的參數傳遞給對象的描述符屬性?如何從類對象中判斷python非類對象
============================================
已更新:
我正在學習如何將__getattribute__
和描述符配合在一起來製作有界的方法。我想知道類對象&如何以不同的方式調用描述符的__get__
。我認爲這兩種類型的對象共享相同的CPython函數,並且該函數必須知道調用對象是類還是非類。但是我錯了。這篇文章解釋得好:
http://docs.python.org/dev/howto/descriptor.html#functions-and-methods
因此類對象使用type.__getattribute__
而非類對象使用object.__getattribute__
。它們是不同的CPython函數。並且super還有第三個__getattribute__
CPython實現。
然而,關於超級一個,上面的文章指出: 報價及報價
由超級返回的對象()還具有自定義_ 的getAttribute _()方法用於調用描述符。超級呼叫(B,obj).m()搜索obj._ 類別 _._ mro _對於緊跟在B之後的基類A,然後返回A._ 字典 _ ['m']。 _ 得到 _(obj,A)。如果不是描述符,則m不變。如果不在字典中,則m恢復爲使用對象進行搜索。_ getattribute _()。
上面的聲明似乎不符合我對Python3.1的實驗。我所看到的是,這是合理的對我說:
super(B, obj).m ---> A.__dict__['m'].__get__(obj, type(obj))
objclass =類型(OBJ)
super(B, objclass).m ---> A.__dict__['m'].__get__(None, objclass)
一個從未傳遞到__get__
這是合理的因爲我相信objclass(而不是A)的mro鏈是m中特別需要的第二種情況。
我做錯了什麼?或者我沒有正確理解它?
我不清楚你在問什麼。也許一個例子是爲了? – 2011-03-03 05:45:33
爲什麼你需要關心這個? – 2011-03-03 06:02:46
借調。關注這一點違背了Python開發的一個東西。 – rossipedia 2011-03-03 06:47:25