類的繼承和組合
阿新 • • 發佈:2020-12-17
目錄
-
類的繼承: 什麼是什麼, 比如人是動物, 所以人就屬於動物類
-
類的組合: 什麼有什麼, 比如老師有名字, 老師有年齡, 老師有課程, 所以名字, 年齡, 課程這些屬性類就可以組合到老師類
類的組合
class Teacher: def __init__(self,name:str,age,sex,level:int,salary): self.name=name self.age=age self.sex=sex self.level=level self.salary=salary class Course: def __init__(self,course_name,course_price,course_period): self.course_name=course_name self.course_price=course_price self.course_period=course_period python=Course('python',1000,'1mons') teacher1=Teacher('ross',18,'male',10,3000) teacher2=Teacher('joey',28,'male',20,3000) teacher1.course=python #不需要改動Teacher類的程式碼就可以直接組合課程屬性到物件teacher1 teacher2.course=python print(teacher1.course.course_name)
抽象類
抽象類, 如下圖, 每種動物都有行走的方法, 但是定義了不同的方法名字, 很不友好, 如果解決這個問題就可以使用抽象類
class People:
def walk(self):
print('people is walking')
class Pig:
def run(self):
print('pig is running')
peo1=People()
pig1=Pig()
peo1.walk()
pig1.run()
# people is walking
# pig is running
通過抽象類規範子類的方法, 抽象類只能被規範, 不能被例項化
引入模組abc
, 下面的程式碼中父類Animal通過abc模組的abstractmethod的裝飾器裝飾了方法run和eat, 所以在子類People和Pig中必須要有被裝飾的這兩個方法run和eat, 如果子類中沒有這兩個方法, 則會報錯如下
TypeError: Can't instantiate abstract class People with abstract methods eat, run
import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def run(self): pass @abc.abstractmethod def eat(self): pass class People(Animal): def run(self): print('people is walking') def eat(self): print('people is eating') class Pig(Animal): def run(self): print('pig is running') def eat(self): print('pig is eating') peo1=People() pig1=Pig() def func(obj): obj.run() func(peo1) func(pig1)