Python-33類的約束

#場景:登陸貼吧權限大致分爲三種:普通用戶,可以查看發帖,博主,管理貼吧,官方後臺,管理博主
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()
# 通過繼承同樣約束了子類
發佈了130 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章