(一)類中的方法包括:例項方法、類方法和靜態方法
例項方法:只能由物件呼叫;至少乙個self引數;執行例項方法時,自動將呼叫該方法的物件賦值給self。
類方法:由類或者物件呼叫; 至少乙個cls引數;執行類方法時,自動將呼叫該方法的類賦值給cls。
靜態方法:由類或者物件呼叫;無缺省引數。
classp:
def__init__
(self,name)
: self.name = name
defcommon_func
(self)
:"""例項方法有self引數,能用例項變數"""
print
(self.name+
","+
"例項方法!"
)
@classmethod
defclass_func
(cls)
:"""類方法需要有@classmethod,還要有cls引數,不能用例項變數"""
print
("類方法!"
) @staticmethod
defstatic_func()
:"""靜態方法需要有@staticmethod,可以有引數也可以沒有,不能用例項變數"""
print
("靜態方法!"
)person = p(
"yqq"
)#只有物件可以呼叫例項方法
person.common_func(
)#執行結果:yqq,例項方法!
#類和物件都可以呼叫類方法
p.class_func(
)#執行結果:類方法!
person.class_func(
)#執行結果:類方法!
#類和物件都可以呼叫靜態方法
p.static_func(
)#執行結果:靜態方法!
person.static_func(
)#執行結果:靜態方法!
(二)類的屬性@property
python中的屬性其實是普通方法的變種。
定義屬性時,在普通方法(即例項方法)的基礎上新增 @property 裝飾器;屬性僅有乙個self引數。
呼叫屬性時,無需括號。
class
test
:def
func
(self)
:return
"--func--"
#定義屬性
@property
defprop
(self)
:return
"--prop--"
obj = test(
)#呼叫普通方法
print
(obj.func())
#執行結果:--func--
#呼叫屬性
print
(obj.prop)
#執行結果:--prop--
讀取屬性、修改屬性和刪除屬性分別對應被@property、@方法名.setter、@方法名.deleter修飾的這三個方法。
class
goods
(object):
@property
defprice
(self)
:print
('@property'
) @price.setter
defprice
(self, value)
:print
('@price.setter'
) @price.deleter
defprice
(self)
:print
('@price.deleter'
)g = goods(
)g.price #呼叫了被@property修飾的方法,執行結果:@property
g.price=
100#呼叫了被price.setter修飾的方法,執行結果:@price.setter
del g.price # 呼叫了被@price.deleter修飾的方法,執行結果:@price.deleter
"""1 當你讀取屬性的時候,執行@property方法
2 當你修改屬性的時候,執行@price.setter方法
3 當你刪除屬性的時候,執行@price.deleter方法
"""
屬性的應用:防止產生髒資料
未使用屬性,產生了髒資料
class
goods
(object):
def__init__
(self)
: self.price =
0def
set_price
(self,value):if
isinstance
(value,
(int
,float))
and value >=0:
self.price = value
g = goods(
)g.set_price(11)
print
(g.price)
#執行結果:11
g.set_price(-10
)#-10沒有滿足if條件,所以price的值沒變,還是11
print
(g.price)
#執行結果:11
g.price =-1
#不會呼叫set_price()方法,產生了髒資料-1
print
(g.price)
使用屬性,不會產生髒資料,只是原來的值保持不變
class
goods
(object):
def__init__
(self)
: self.good_price =
0 @property
defprice
(self)
:return self.good_price
@price.setter
defprice
(self, value)
:#-10傳給了value,不滿足if條件,不會修改屬性,屬性保持原來的值
ifisinstance
(value,
(int
,float))
and value>=0:
self.good_price=value
g = goods(
)g.price #讀取屬性,自動執行@property修飾的方法,返回0
g.price=-10
#修改屬性,自動執行@price.setter修飾的方法
print
(g.price)
#執行結果:0
g.price=
123print
(g.price)
#執行結果:123
類的三種方法
方法 函式 1 例項方法 函式 預設 2 類方法 函式 classmethod 3 靜態方法 函式 staticmethod class person person number 0 類變數 def init self name,gender 構造方法 用來物件初始化 self.name name ...
python類的三種方法
python類有三種方法。1.一般方法,即不加任何修飾的,直接用def定義的方法。如 in 14 class a def a self print 一般方法 in 15 class a a in 16 class a.a 一般方法2.staticmethod方法 經過staticmethod修飾過的...
抽象類裡面的三種方法
抽象類裡面有三種方法 1.抽象方法 2.普通方法 3.虛方法 1 abstract class class1210 抽象類class1裡面的虛方法 11public virtual void str3 1215 16 那麼,這三種方法的區別是什麼呢?1 class class2 class128 虛...