[英]instance.__dict__ & class.__dict__
代碼優先:
class A(object):
def foo(self):
self.foo = 'foo'
def bar(self):
self.bar = 'bar'
cls_dict = dict(A.__dict__) #not empty
a = A()
a_dict = dict(a.__dict__) #empty, why?
在Python中,一切都是包含屬性的對象。 這包括課程本身 。 整個面向對象的事物具有定義方法和實例的類,這些方法和實例可以使用每個實例的不同數據執行這些方法,這只是用於在一系列對象中查找屬性的協議。
class A(object):
def foo(self):
self.foo = 'foo'
def bar(self):
self.bar = 'bar'
這將創建一個綁定到名稱A
的類對象。 該對象包含兩個屬性foo
和bar
,每個屬性都綁定到方法對象。
a = A()
這將創建一個綁定到名稱a
的對象,該對象是A
的實例。 它根本不包含任何屬性。 但是它是A
的實例這一事實意味着當您要求a.foo
時“查找協議”首先在a
上查找屬性,然后如果失敗則在A
上查找屬性。 這就是A
所有實例可以訪問同一組方法的方式。
在Python中,您也可以隨時(幾乎)在任何對象上創建屬性。 所需要的只是some_object.some_attribute = some_value
。 在您這樣做之前,該屬性不存在。 因此,與實際調用a.foo()
或a.bar()
那些foo
和bar
屬性不存在a
(沒有做任何其他的屬性,你的程序可能會或可能不是一天添加到該對象),這就是為什么a.__dict__
在您調用它時是空的。 如果您希望foo
和bar
'default'值存在於每個對象上,則需要通過在__init__
方法中設置這些值來說明。
a.__dict__
為空,因為沒有在實例上初始化任何屬性,因為沒有定義__init__()
。 同時,類是一個對象,它初始化了一些屬性。
>>> A
<class '__main__.A'>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.