python的類屬性和例項屬性

2021-06-22 17:16:50 字數 927 閱讀 1758

python的類屬性和例項屬性

今天一同事說踩了python的坑, 這確實是個「坑」

但是我覺得python之所以這樣設計,就是明確要求寫**的人知道自己在寫什麼^ ^

python的例項屬性必須在__init__(self) 方法中定義,直接跟在類名後邊定義的屬性都預設是類屬性(類似於c++的static變數)。

而python例項又可以靈活的隨便增加屬性,便出現了中看似詭異的現象。

我們來看一下他的原**:

你覺得輸出會是什麼?

結果是 model_path 分別是 "xx_model" 和 "oo_model"

而model_dict全都是第二次呼叫的結果,也就是oo_model生成的dict的值(注意,他前邊有一句self.model_dict.clear() )

原因是什麼呢? "坑" 就在 他是用self.***x 這種方式引用變數,而不是self.__class__.***x

(1)self.model_path=path; #這對self.model_path進行了賦值,python中的第一次賦值視為變數的定義!

(2) self.***x這種格式的第一次賦值含義是什麼呢?-->含義是:定義,也就是說定義了乙個名為***x的例項屬性。

(3) 因此m1,m2的兩次呼叫,分別定義了對應的(不同的)self.model_path屬性。

而self.model_dict,從頭到尾都是引用它,從未進行過賦值(重定義),所以引用的都是 類屬性

Python 類屬性和例項屬性

一 簡述二者區別 對類屬性的修改可被儲存在類中 單例模式就是基於類屬性的這種特性 修改後的屬性能夠被子類繼承 例項屬性的修改只對該例項有效,不會對其他例項和其對應類的子類例項造成影響 二 來看下例子 類屬性 class a object a 1 pass print a.a 檢視a類的屬性a,結果為...

python 例項屬性和類屬性

如何在乙個類中定義一些常量,每個物件都可以方便訪問這些常量而不用重新構造?第乙個問題,在 python 的類裡,你只需要和函式並列地宣告並賦值,就可以實現這一點,例如這段 中的 welcome str。一種很常規的做法,是用全大寫來表示常量,因此我們可以在類中使用 self.welcome str ...

python的類屬性和例項屬性

在處理專案的 的時候,發現如下 在多次呼叫的時候會出現問題。class test1 object dataarr def init self,i def run self print self.dataarr t1 test1 1 t2 test1 2 t1.run t2.run 輸出的結果照常理的...