類中的三種方法和類的屬性 property

2021-10-03 23:00:39 字數 3547 閱讀 4371

(一)類中的方法包括:例項方法、類方法和靜態方法

例項方法:只能由物件呼叫;至少乙個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 虛...