2017-09-06 107 views
1

對於一類的屬性:類或實例的`__dict__`包含哪些屬性,哪些不包含?

  • 類或一個實例的屬性__dict__不包括__base____name__。 類__dict__包含哪些屬性,哪些不屬於?
  • 如何獲得課程的所有屬性?

對於一個實例的屬性:

  • 一個實例的屬性__dict__不包括__class__。 一個實例的__dict__包含哪些屬性,哪些不屬於?
  • 如何獲取實例的所有屬性?

謝謝。

+0

看看['dir'](https://docs.python.org/3/library/functions.html#dir)函數。它包含超類的參數。更多信息[這裏](https://stackoverflow.com/questions/6761106/inspect-getmembers-vs-dict-items-vs-dir) –

+0

它不包括大部分的魔術方法,在'__slots__'中定義的任何東西, 除其他事項外。 –

+0

@MadPhysicist謝謝。 「魔法」是什麼意思? – Ben

回答

-2

字典很有意思。您需要了解的是Python如何查找屬性,方法等。像名稱存儲在dir(實例)中,它不是您班級的標準getattr的一部分。只有明確定義的屬性和方法是A. dict的一部分,其他東西是複雜查找系統的一部分,剩下的就是查看類,子類等,直到找到「對象」。

+0

第二個問題都沒有回答;並檢查格式'__dict__' vs __dict__ – no1xsyzy

1

__dict__不包括:

  • 任何屬性(或描述符)的類型(或在MRO任何類型的)中所定義。
  • 聲明爲C中實現類型的一部分的任何屬性。
  • __slots__中聲明的任何屬性。

您可以做的最好的列出所有屬性是dir,但它往往是不可靠的。

+0

還有,方法來覆蓋'__dict__'本身,以及重寫覆蓋的方法。我忘記了這是如何工作的。 – o11c