面向对象编程02—装饰器、类方法、静态方、访问控制
四、實例方法
實例方法指的是只有實例對象才可以調(diào)用的方法
在類對象中定義實例方法時,第一個形參調(diào)用該方法的實例對象,其對應(yīng)的實參由系統(tǒng)自動傳入。第一個形參的名稱通常是self,也可以是其它名稱。
實例方法只能被實例對象所調(diào)用,有兩種調(diào)用方式:
1、在類對象的內(nèi)部(其它實例方法中)
語法格式:self.方法名([實參])
2、在類對象的外部
類對象的所有實例對象都有一個指向類對象的指針,所以,類對象的所有實例對象都可以調(diào)用類對象中定義的實例方法。
調(diào)用實例方法時,系統(tǒng)自動將調(diào)用該實例方法的實例對象作為實參傳遞給第一個形參,第一個實參傳遞給第二個形參,第二個實參會傳遞給第三個形參,以此類推。
python是動態(tài)語言,在實例對象或類對象創(chuàng)建之后,可以對其動態(tài)地綁定實例方法。
同一個類對象的不同實例對象所綁定的實例方法是相互獨立的。也就是說,給一個實例對象所綁定的實例方法對于另一個實例對象是不去作用的。
為了能讓一個類對象的所有實例對象都能調(diào)用實例方法,可以給類對象綁定該實例方法。
#定義一個函數(shù)作為實例方法 def do_sth(self):print("do_sth()被調(diào)用了")#導(dǎo)入標(biāo)準(zhǔn)庫types中類MethodType from types import MethodType#給實例對象mc動態(tài)地綁定實例方法 mc.do_sth = MethodType(do_sth,mc)#調(diào)用綁定的實例方法 mc.do_sth() #do_sth()被調(diào)用了五、函數(shù)裝飾器
對于某個函數(shù),如果我們希望在不改變該函數(shù)代碼的前提下,為該函數(shù)增加額外的功能,那么就可以使用裝飾器來裝飾該函數(shù)。
1、裝飾器是一個函數(shù),裝飾器接收一個函數(shù)作為參數(shù)(傳入的實參是被裝飾的函數(shù))。
2、裝飾器的內(nèi)部嵌套定義另一個函數(shù),內(nèi)函數(shù)的形參定義為(*args,**kwargs).
3、在函數(shù)中,首先完成為被裝飾函數(shù)添加的新功能,然后調(diào)用被裝飾的函數(shù)。
4、把裝飾器應(yīng)用到被裝飾函數(shù)的語法為:在被裝飾函數(shù)的前面添加“@裝飾器的函數(shù)名”。
六、類方法
類方法指的是類對象中使用裝@classmethod進(jìn)行裝飾的方法。
1、類對象中定義類方法時,必須使用裝飾器@classmethod進(jìn)行裝飾,此外,第一個形參表示類對象,其對應(yīng)的實參有系統(tǒng)自動傳入。第一個形參的名稱通常是cls,也可以是其它名稱。
2、類方法可以被類對象所調(diào)用,語法格式:類對象.方法名([實參])或cls.方法名([實參])。
類對象的所有實例對象都有一個指向類對象的指針,所以,類對象的所有實例對象都可以調(diào)用類對象中定義的方法。
調(diào)用類方法時,系統(tǒng)自動將類對象作為實參傳遞給第一個形參。第一個實參會傳遞給第二個形參,第二個實參會傳遞給第三個形參,依次類推。
class MyClass(object): #在類對象中定義類方法@classmethoddef class_func(cls,a,b):print(a,b)# 在類對象內(nèi)部調(diào)用類方法@clsaamethoddef class_func_2(cls):MyClass.class_func_1(1,2)#orcls.class_func_1(1,2)#通過實例對象調(diào)用類方法def ins_func(self):self.class_func_1(1,2)七、靜態(tài)方法
類對象的靜態(tài)方法只是一個普通函數(shù)。把某個普通函數(shù)歸屬于類對象,可能只是為了易于代碼管理。
1、在類對象中定義靜態(tài)方法時,必須使用裝飾器@staticmethod進(jìn)行裝飾。
2、靜態(tài)方法只是一個普通函數(shù),因此,第一個形參沒有特殊含義和要求。
3、靜態(tài)方法可以被類對象所調(diào)用,語法格式:類對象.方法名([實參])或cls.方法名([實參】)。
靜態(tài)方法也可以被實例對象所調(diào)用,語法格式:實例對象.方法名([實參])或self.方法名([
實參])。
調(diào)用靜態(tài)方法時的參數(shù)傳遞與調(diào)用普通函數(shù)是一樣的。
八、控制訪問
控制類對象的屬性和方法在類對象的外部是否可以直接訪問。如果在類對象的某個屬性或方法前添加兩個下劃線__,那么在類對象的外部就不能直接訪問該屬性或方法了。
class MyClass(object):def __init__(self):self.__pia = 18def __pim(self):print("__pim()被調(diào)用了")def do_sth(self):print(self.__pia)self.pim()#18 #__pim()被調(diào)用了 #None注:嵩天老師《python及其應(yīng)用》筆記
總結(jié)
以上是生活随笔為你收集整理的面向对象编程02—装饰器、类方法、静态方、访问控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进阶函数
- 下一篇: 面向对象编程03—封装、继承、重写、MR