面向對象的三大特性:封裝、繼承、多態
繼承時面向對象編程的優點之一
類的繼承與方法重載:
繼承的特點:
減少代碼和靈活定製新類
子類具有父類的屬性和方法
子類不能繼承父類的私有屬性/方法
子類可以添加新的方法
子類可以修改父類的方法
繼承的語法:
定義類時,在類名後:(繼承的類名)
多重繼承時,括號中放多個父類名,逗號分開
例子:class MyClass(BaseClass)
python中沒有繼承的類,默認繼承Object
類名.base 類名.bases 查看父類
代碼:
# -*- coding=utf-8 -*-
class A:
pass
print(A.__base__)
class B(A):
pass
print(B.__base__)
class C:
pass
class D(A,C):
pass
print(D.__bases__)
super() 父類
super.方法名() 調用父類方法
子類調用方法時,會先在子類找,子類不存在時,會向父類找
# -*- coding=utf-8 -*-
class Washer:
company = "Le xi"
def __init__(self,water=10,scour=2):
self._water = water
self.scour = scour
self.year = 2010
pass
@staticmethod
def spins_ml(spins):
print("company:",Washer.company)
return spins * 0.4
@classmethod
def get_washer(cls,water,scour):
return cls(water,Washer.spins_ml(scour))
@property
def water(self):
return self._water
@water.setter
def water(self,water):
if 0 <= water <= 500:
self._water = water
pass
else:
print("輸入的值有誤!")
pass
pass
@property
def total_year(self):
return 2015-self.year
def set_water(self,water):
self.water = water
pass
def set_scour(self,scour):
self.scour = scour
pass
def add_water(self):
print('Add water:',self.water)
pass
def add_scour(self):
print('Add scour:',self.scour)
pass
def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...')
pass
pass
# if __name__ == '__main__':
# print(Washer.spins_ml(8))
# w = Washer()
# print(w.spins_ml(8))
# w = Washer(200,Washer.spins_ml(9))
# w.start_wash()
# w = Washer.get_washer(200, 10)
# w.start_wash()
# pass
class WasherDry(Washer):
def dry(self):
print('Dry clothes...')
pass
#方法重載
# def start_wash(self):
# self.add_scour()
# self.add_water()
# print("Start wash...")
# pass
# pass
#調用父類方法
def start_wash(self):
print("....")
super().start_wash()
print("......")
if __name__ == '__main__':
w = WasherDry()
w.start_wash()
print(w.scour,w.company)
w.dry()