2017-03-02 70 views
0

我對Python中的屬性引用有一些疑問。我曾經認爲屬性參照在instance.attribute是自下而上的方法。 首先,在實例字典中查找屬性。但是我正在閱讀一些文章,聲稱屬性查找是自頂向下的方法,即當引用一個屬性時,將Class.__getattribute__稱爲第一步。這裏instance是類的實例ClassPython中的屬性參考

我的問題是(考慮類可能包含一個數據描述符或者非數據描述符)

  1. 是屬性引用一個自下而上或自上而下
  2. 看起來既像會有類似的結果。我在這裏糾正?

回答

0

是屬性引用一個自下而上或自上而下

我不會歸類爲自下而上或自上而下的。 Pythons __getattribute__首先在類字典中進行搜索,以便首先查找數據描述符(如果它們存在),然後在實例字典中搜索實例變量(如果沒有找到數據描述符)。

看起來都將給類似的結果

沒有,如果是嚴格的自下而上的(例如第一),然後用同名的實例變量作爲一個數據描述符會掩蓋它。

如果是自頂向下,那麼與實例變量同名的非數據描述符會掩蓋它。