覆蓋類屬性

2021-10-02 22:09:55 字數 578 閱讀 5947

摘自《流暢的python》

python 有個很獨特的特性:類屬性可用於為例項屬性提供預設值。

vector2d 中有個typecode類屬性,因為vector2d 例項本身沒有typecode 屬性,所以self.typecode 預設獲取的是vector2d.typecode類屬性的值。

但是,如果為不存在的例項屬性賦值,會新建例項屬性。假如我們為typecode 例項屬性賦值,那麼同名類屬性不受影響。然而,自此之後,例項讀取的self.typecode 是例項屬性typecode,也就是把同名類屬性遮蓋了。借助這一特性,可以為各個例項的typecode 屬性定製不同的值。

如果想修改類屬性的值,必須直接在類上修改,不能通過例項修改。可以這麼做:

vector2d.typecode = 'f'
還有種修改方法更符合python 風格,而且效果持久,也更有針對性。類屬性是公開的,因此會被子類繼承,於是經常會建立乙個子類,只用於定製類的資料屬性。

class shortvector2d(vector2d):

typecode = 'f'

Java中 元素的繼承,子類屬性覆蓋父類屬性的例項

子類原始碼 package jason public class subdemo extends basedemo public void accessbase public static void main string args 父類原始碼 package jason public class ...

python 類屬性 用處 Python類屬性詳解

類屬性1.類定義後就存在,而且不需要例項化 2.類屬性使得相同類的不同例項共同持有相同變數 類屬性例項 attrb.py class testcss cssa class attribe def init self self.a 0 self.b 10 def info self print a s...

類屬性 例項屬性

例項屬性 物件屬性 顧名思義,類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在乙個副本,這個和c 中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問 例項如下 class people object name tom 公有的類屬性 age ...