1. 程式人生 > >python-類-物件-屬性-方法

python-類-物件-屬性-方法

在這裡插入圖片描述類屬性和例項屬性
例項方法(物件方法):
# 如果想在方法中直接使用self 就使用例項方法
def 方法名(self):
程式碼邏輯
執行例項方法: 物件名.方法名()
類方法
# 如果想在方法中直接使用cls 就使用類方法
@classmethod
def 方法名(cls):
程式碼邏輯
執行類方法: 類物件(類名).方法名 或者 物件名(例項物件).方法名
靜態方法
# 如果不使用self 也不使用cls 就可以用靜態方法
@staticmethod
def 方法名():
程式碼邏輯
執行靜態方法: 類物件(類名).方法名 或者 物件名(例項物件).方法名
類方法
在這裡插入圖片描述屬性
是類物件所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第一個引數必須是類物件,一般以cls作為第一個引數(當然可以用其他名稱的變數作為其第一個引數,但是大部分人都習慣以’cls’作為第一個引數的名字,就最好用’cls’了),能夠通過例項物件和類物件去訪問。

類方法還有一個用途就是可以對類屬性進行修改:
p.set_country(‘japan’)
print(p.get_country())
print(People.get_country())
靜態方法
需要通過修飾器@staticmethod來進行修飾,靜態方法不需要多定義引數,可以通過物件和類來訪問

總結
1.從類方法和例項方法以及靜態方法的定義形式就可以看出來,類方法的第一個引數是類物件cls,那麼通過cls引用的必定是類物件的屬性和方法;
2.例項方法的第一個引數是例項物件self,那麼通過self引用的可能是類屬性、也有可能是例項屬性(這個需要具體分析),不過在存在相同名稱的類屬性和例項屬性的情況下,例項屬性優先順序更高。
3.靜態方法中不需要額外定義引數,因此在靜態方法中引用類屬性的話,必須通過類例項物件來引用

類屬性與例項屬性
類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在一個副本,對於公有的類屬性,在類外可以通過類物件和例項物件訪
print(p.name) # 正確
print(People.name) # 正確
print(p.__age) # 錯誤,不能在類外通過例項物件訪問私有的類屬性
print(People.__age) # 錯誤,不能在類外通過類物件訪問私有的類屬性
如果需要在類外修改類屬性,必須通過類物件去引用然後進行修改。如果通過例項物件去引用,會產生一個同名的例項屬性,這種方式修改的是例項屬性,不會影響到類屬性,並且之後如果通過例項物件去引用該名稱的屬性,例項屬性會強制遮蔽掉類屬性,即引用的是例項屬性,除非刪除了該例項屬性。