#場景:登陸貼吧權限大致分爲三種:普通用戶,可以查看發帖,博主,管理貼吧,官方後臺,管理博主
class member:
def login(self):
print("我是普通人")
class bozhu:
def login(self):
print("我是博主")
class houtai:
def denglu(self): #報錯,上層程序員寫代碼沒有按照規範,常規調用會失敗
print("官方後臺")
#整合功能
def deng(obj):
obj.login()
m = member()
b = bozhu()
h = houtai()
deng(m)
deng(b)
deng(h)
#定義一個約束
class base:
def login(self):
# 沒有 被實現 錯誤
raise NotImplementedError("你要重寫login,否則報錯") #拋異常
#強制規定此類必須重寫改方法,對子類進行了一個約束,必須重寫
#定義一個類,讓其他的都去繼承這個類
#場景:貼吧權限大致分爲三種:普通用戶,可以查看發帖,博主,管理貼吧,官方後臺,管理博主
class member(base):
def login(self):
print("我是普通人")
class bozhu(base):
def login(self):
print("我是博主")
class houtai(base):
def denglu(self): #報錯,上層程序員寫代碼沒有按照規範,常規調用會失敗
print("官方後臺")
#整合功能
def deng(obj):
obj.login()
m = member()
b = bozhu()
h = houtai()
deng(m)
deng(b)
deng(h)
#執行輸出:
我是普通人
Traceback (most recent call last):
我是博主
File "I:/python文件/python入門/week3/類的約束.py", line 26, in <module>
deng(h)
File "I:/python文件/python入門/week3/類的約束.py", line 20, in deng
obj.login()
File "I:/python文件/python入門/week3/類的約束.py", line 5, in login
raise NotImplementedError("你要重寫login,否則報錯") #拋異常
NotImplementedError: 你要重寫login,否則報錯
當看到NotimplementedError後,就要重寫繼承他
第二種約束(上一種很重要,此處瞭解)
###第二種方法 抽象類和抽象方法
#不需要給出具體的方法體,只寫一個pass就可以了
#抽象類中如果有抽象方法,此時這個類不能創建對象
#如果一個類中所有方法都是抽象方法,那麼這個類也可以稱爲接口類
#寫抽象方法需要導入模塊
from abc import ABCMeta,abstractmethod
#此時,抽象類不能創建對象
class animal(metaclass=ABCMeta): #此時就是一個抽象類
@abstractmethod #此時就是一個抽象方法 特點:不需要方法體
def chi(self): pass #此時,吃只是一個概念,動物吃的不同,沒辦法具體的描述出來,
# 抽象類中可以有正常的方法
def dong(self):
print("動物能動")
a = animal()
a.chi()
# 輸出:TypeError: Can't instantiate abstract class animal with abstract methods chi 不能實例化抽象類,裏面有chi
class cat(animal): #此時,貓裏面也有一個抽象方法,此時是創建不了對象的
pass
a = cat()
from abc import ABCMeta,abstractmethod
class animal(metaclass=ABCMeta):
@abstractmethod
def chi(self): pass
def dong(self):
print("動物能動")
class cat(animal):
def chi(self):
print("貓喜歡吃魚")
a = cat()
a.chi()
# 通過繼承同樣約束了子類