簡體   English   中英

python中的“未聲明的變量”聲明

[英]“Undeclared variable” declaration in python

以下代碼是一個示例:

class A(object):
    def f(self):
        pass
A.f.b = 42

如何分配此變量? 如果聲明Afa​​,Afb和Afc變量,是否要創建3個A的不同對象? 有人可以解釋內存中發生了什么(因為這似乎不是用C輕松編碼的東西)?

Ab = 42將類變量添加到A ,從而使它對於A每個實例都立即可見(但在內存中只有1個條目)

您可以隨時在Python中向類和實例添加屬性。 最干凈的方法是在聲明時間進行操作,否則可能會產生誤導。

class A:
    b = 12

但是對於類或實例的快速“擴展”,您可以選擇動態添加它們。

例如:

class A(object):
    pass

a = A()
print('b' in dir(a))  # False
A.b = 42
print('b' in dir(a))  # True even if instanciated before creation of `b`

以下內容僅適用於Python 3:

class A(object):
    def f(self):
        pass
A.f.a = 41
A.f.b = 42
A.f.c = 43

Affunction類型的對象,您始終能夠向function對象添加新屬性。 沒有創建A實例; 這三個屬性是從函數f本身引用的。

但是,如果有兩個實例a1 = A()a2 = A() ,則不會定義a1.fba2.fb ,因為a1.f不是對Af的引用; 它是對type method對象的引用。 這是由於Python的描述符協議用於實現實例方法的結果。

暫無
暫無

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

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