我們在前面講的類定義格式中,「class類名:」。實際上,當直譯器執行class語句時,就會建立乙個類物件。
#測試類物件的生成
class
student
:pass
print
(type
(student)
)print(id
(student)
)stu2 = student
s1 = stu2
print
(s1)
執行結果
<
class
'type'
>
1778915500424
<
class
'__main__.student'
>
可以看到實際上生成了乙個變數名就是類名「student」的物件。我們通過賦值給新變數stu2,也能實現相關的呼叫。說明,確實建立了「類物件」。
類屬性是從屬於「類物件」的屬性,也稱為「類變數」。由於,類屬性從屬於類物件,可以被所有例項物件共享。
類屬性的定義方式:
class 類名:
類變數名 = 初始值
在類中或者類的外面,我們可以通過:「類名.類變數名」來讀寫。
class
student
: company =
"sxt"
# 類屬性
count =
0# 類屬性
def__init__
(self, name, score)
: self.name = name # 例項屬性
self.score = score
student.count = student.count +
1def
say_score
(self)
:# 例項方法
print
("我的公司是:"
, student.company)
print
(self.name,
'的分數是:'
, self.score)
s1 = student(
'張三',80
)# s1是例項物件,自動呼叫__init__()方法
s1.say_score(
)s2 = student(
"高淇",60
)s3 = student(
"高小希"
,100
)print
('一共建立個student物件'
.format
(student.count)
)
執行結果
我的公司是: sxt
張三 的分數是: 80
一共建立3個student物件
類方法時從屬於「類物件」的方法。類方法通過裝飾器@classmethod來定義,格式如下:
@classmethod
def 類方法名(cls [,形參列表]) :
函式體要點如下:
1.@clsssmetod必須位於方法上面一行
2.對於給cls必須有;cls指的就是「類物件」本身;
3.呼叫類方法格式:「類名.類方法名(引數列表)"。引數列表中,不需要也不能給cls傳值。
4.類方法中訪問例項屬性和例項方法會導致錯誤
5.子類繼承父類方法時,傳入cls所示子類物件,而非父類物件
#類方法使用測試
class
student
: company =
"尚學堂"
# 類屬性
@classmethod
defprintcompany
(cls)
:print(id
(cls)
)print
(cls.company)
student.printcompany(
)print(id
(student)
)
執行結果
1738598859304
尚學堂1738598859304
python中允許定義與「類物件」無關的方法,稱為「靜態方法」。
「靜態方法」和在模組中定義普通函式沒有區別,只不過「靜態方法」放到了「類的名字空間裡面」,需要通過「類呼叫」。
靜態方法通過裝飾器@staticmethod來定義,格式如下:
@staticmethod
def 靜態方法名([形參列表]) :
函式體要點如下:
1.@staticmethod必須位於方法上面一行
2.呼叫靜態方法格式:「類名.靜態方法名(引數列表)」。
3.靜態方法中訪問例項屬性和例項方法會導致錯誤
class
student
: company =
"***"
@staticmethod
defadd
(a,b)
:print
("+="
.format
(a,b,
(a+b)))
return a+b
student.add(20,
30)
執行結果
20+30
=50
類屬性,類方法和靜態方法
類屬性 針對類物件定義的屬性 使用賦值語句在class關鍵字下可以定義類屬性 類方法 針對類物件定義的方法 在類方法內部可以直接訪問類屬性或者呼叫其他的類方法 class toy object 使用賦值語句 記錄所有的玩具數量 count 0 def init self,name self.name...
Python 類屬性 類方法 靜態方法
一.類屬性 1.參考 一 參考 二 說明 1.類屬性可以使用類物件或例項物件訪問 2.可以通過類物件來修改類屬性,但是不可以通過例項物件來修改類屬性。class house 類屬性 price high 通過類物件獲取類屬性值 print house.price 通過例項物件獲取類屬性值 h hou...
類屬性和類方法與靜態方法
class dog def init self,name self.name name staticmethod 方法中既不需要 類屬性 也不需要例項屬性的時候 用靜態方法 好處是節省記憶體 defmethod print 靜態方法 classmethod 自定義類的方法和屬性時用 作用是 直譯器可...