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