類
封裝 繼承 多態
一靜態屬性
1、靜態變量和靜態方法都屬於類的靜態成員,它們與普通的成員變量和成員方法不同,靜態變量和靜態方法只屬於定義它們的類,而不屬於某一個對象。
2、靜態變量和靜態方法都可以通過類名和對象進行訪問。
二靜態方法
1、靜態方法中不需要傳入self參數,因此無法訪問在靜態方法中訪問靜態實例變量。
》、靜態方法中不可以直接訪問類的靜態變量,但可以通過類名引用靜態變量。
3、可以通過裝飾符定義靜態變量。
三 類方法
類方法的第一個參數應該是 cls
由 哪一個類 調用的方法,方法內的 cls 就是 哪一個類的引用
這個參數和 實例方法 的第一個參數是 self 類似
提示 使用其他名稱也可以,不過習慣使用 cls
通過 類名. 調用 類方法,調用方法時,不需要傳遞 cls 參數
在方法內部
可以通過 cls. 訪問類的屬性
也可以通過 cls. 調用其他的類方法
————————————————
版權聲明:本文為CSDN博主「jomes_wang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jomes_wang/article/details/111627954
四類屬性
1類屬性 就是給 類對象 中定義的 屬性
2通常用來記錄 與這個類相關 的特征
3類屬性 不會用於記錄 具體對象的特征
五私有方法
以 __兩個下划線開頭,聲明該方法為私有方法,只能在類的內部調用 (類內部別的方法可以調用他),不能在類地外部調用。
六私有屬性
*xx: 公有變量
_x: 單前置下划線,私有化屬性或方法,from somemodule import 禁止導入,類對象和子類可以訪問
_xx:雙前置下划線,避免與子類中的屬性命名沖突,無法在外部直接訪問(名字重整所以訪問不到)
xx:雙前后下划線,用戶名字空間的魔法對象或屬性。例如:init , __ 不要自己發明這樣的名字
xx:單后置下划線,用於避免與Python關鍵詞的沖突
通過name mangling(名字重整(目的就是以防子類意外重寫基類的方法或者屬性)如:_Class__object)機制就可以訪問private了。
總結
屬性;
1.類屬性就是屬於類所有,可以直接用類名.屬性名直接調用,類的屬性在內存中只有一份。實例屬性就是在__init__()方法中初始化的屬性;
2.實例屬性屬於類的對象所有,可以用對象名.屬性名的形式進行調用,但是不能用類名.屬性名進行調用 。因為實例屬性只有在實例創建時,才會初始化創建。
3私有屬性,一般屬性的處理方式為:1.將屬性定義為私有屬性。2.添加一個可以調用的方法,供調用。
方法
1私有方法:以 __兩個下划線開頭,聲明該方法為私有方法,只能在類的內部調用 (類內部別的方法可以調用他),不能在類地外部調用
2類方法的使用:是類所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為第一個參數,也可以有別的參數。但是第一個必須是類對象,類似類中的def定義的普通方法第一個參數要是self一樣的道理
# 類常用法
class A:
calss_attrution = 'arr of a' # 類屬性
staticmethod.name="1"#靜態屬性
def __init__(sel):
_prapertyattr_='the propertyatt of a'#私有方法
print("這是基類init")
def run(self,num): #實例方法
print("基類走了%d" %num)
def speak(self,age):
print("基類 speak %d" %age)
@staticmethod
def satic_a(): #靜態方法
print("A 的靜態")
@classmethod
def calss_mathon(self): #類方法
print("the class mathod of a")
@property#相當於getter 和setter直接修改私有屬性
def pre_a(self): #私有方法
print('the property of a')
class C(A): #繼承
def __init__(self,name=None):
print('這是子類構造方法')
super(C, self).__init__()
self.name=name
print("重寫init")
def speak(self):
print("從寫基類方法")
class W(a,c):
pass
d=C()
d.run(22)
d.speak()
def a(cls):
print('nihao')