Python基礎之十一(類的方法和特性)
一、類的方法
(1)例項方法(方法也稱函式)
定義:在類裡面,需要對類進行例項化之後才能呼叫的方法,預設傳參例項本身,沒有修飾符
語法:
def 方法名(self):
方法體
呼叫:
在類外部:例項.方法名()
在類內部:self.方法名()
例子:
class Dog: # 例項方法 def eat(self): print('狗狗吃飯') # 例項方法 def sleep(self): self.eat() # 在類內部呼叫eat例項方法 print('狗狗睡覺') if __name__View Code== '__main__': dog = Dog() # 例項化 dog.sleep() dog.eat() # 在類外部例項化後呼叫
輸出結果:
狗狗吃飯
狗狗睡覺
狗狗吃飯
(2)類方法
定義:在類裡面,無需對類進行例項化便可呼叫的方法,預設傳參類本身,有修飾符@classmethod
語法:
@classmethod
def 方法名(cls):
方法體
呼叫:
在類外部:類.方法名() 或 例項.方法名()
在類內部:self.方法名()
例子:
class Dog:View Code# 類方法 @classmethod def eat(cls): print('狗狗吃飯') # 例項方法 def sleep(self): self.eat() # 在類內部呼叫eat類方法 print('狗狗睡覺') if __name__ == '__main__': Dog.eat() # 類呼叫類方法 dog = Dog() dog.eat() # 例項呼叫類方法 dog.sleep()
輸出結果:
狗狗吃飯
狗狗吃飯
狗狗吃飯
狗狗睡覺
(3)靜態方法
定義:在類裡面,無需對類進行例項化便可呼叫的方法,且無需傳參便可呼叫,有修飾符@staticmethod
語法:
@staticmethod
def 方法名():
方法體
呼叫:
在類外部:類.方法名() 或 例項.方法名()
在類內部:self.方法名()
例子:
class Dog: # 靜態方法 @staticmethod def eat(): print('狗狗吃飯') # 例項方法 def sleep(self): self.eat() # 在類內部用例項本身呼叫eat靜態方法 print('狗狗睡覺') if __name__ == '__main__': Dog.eat() # 在類外部用類本身呼叫靜態方法 dog = Dog() dog.eat() # 在類外部用例項呼叫靜態方法 dog.sleep()View Code
輸出結果:
狗狗吃飯
狗狗吃飯
狗狗吃飯
狗狗睡覺
注:靜態方法和類方法類似,靜態方法預設無需傳參,類方法預設傳參類本身。
(4)私有方法
定義:在類裡面,僅類內部可進行呼叫,類外部無法訪問,傳參例項本身,無修飾符
語法:
def __方法名(): # 注意方法名前面是兩條下劃線
方法體
呼叫:
在類內部:self.__方法名()
例子:
class Test: def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def __test01(self): return self.num1 + self.num2 def __test02(self): return self.num1 * self.num2 def test03(self): print('相加的結果是:', self.__test01()) print('相乘的結果是:', self.__test02()) if __name__ == '__main__': test = Test(3, 5)View Code
輸出結果:
相加的結果是: 8
相乘的結果是: 15
二、類的特性
(1)封裝
定義:隱藏功能實現的內部細節,對外僅提供介面,傳遞必要的引數即可實現想要的結果,就稱為封裝。例如函式、類等都是封裝的一種,生活中的封裝如取款機、計算器等也是封裝。
(2)繼承
定義:子類繼承父類,子類無需重新定義父類的屬性和方法便擁有了父類的屬性和方法(私有屬性和私有方法除外),這就是繼承。
語法:
class Father:
父類屬性和方法
class Son(Father):
pass
例子:
class Father: money = '100萬' __myself = '衣服' def drive(self): print('我會開車') def __fly_a_plane(self): print('我會開飛機') class Son(Father): # Son類繼承了Father類的money屬性和drive方法,私有屬性__myself和私有方法__fly_a_plane無法繼承 pass if __name__ == '__main__': son = Son() print(f'我有{son.money}') # 可以訪問父類的money屬性 son.drive() # 可以呼叫父類的drive方法View Code
輸出:
我有100萬
我會開車
(3)多型【瞭解,在Python中多型不嚴謹】