簡體   English   中英

實例.__ dict__&class .__ dict__

[英]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的類對象。 該對象包含兩個屬性foobar ,每個屬性都綁定到方法對象。

a = A()

這將創建一個綁定到名稱a的對象,該對象是A的實例。 它根本不包含任何屬性。 但是它是A的實例這一事實意味着當您要求a.foo時“查找協議”首先在a上查找屬性,然后如果失敗則在A上查找屬性。 這就是A所有實例可以訪問同一組方法的方式。

在Python中,您也可以隨時(幾乎)在任何對象上創建屬性。 所需要的只是some_object.some_attribute = some_value 在您這樣做之前,該屬性不存在。 因此,與實際調用a.foo()a.bar()那些foobar屬性不存在a (沒有做任何其他的屬性,你的程序可能會或可能不是一天添加到該對象),這就是為什么a.__dict__在您調用它時是空的。 如果您希望foobar 'default'值存在於每個對象上,則需要通過在__init__方法中設置這些值來說明。

a.__dict__為空,因為沒有在實例上初始化任何屬性,因為沒有定義__init__() 同時,類是一個對象,它初始化了一些屬性。

>>> A
<class '__main__.A'>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM