類的約束

1、提取父類

  • 在父類中定義好方法,在這個方法中什麼都不用幹。就拋出一個異常就能夠了。這樣全部的子類都必須重寫這個方法。不然,訪問時就會報錯
class Base(object):
    def login(self):
        raise NotImplementedError("子類沒有實現該方法")   # NotImplementedError 沒有實現的錯誤


class Normal(Base):
    def login(self):
        pass


class Member(Base):
    def denglu(self):
        pass


class Admin(Base):
    def login(self):
        pass


# 項目經理總入口
def login(obj):
    print("準備驗證碼...")
    obj.login()
    print("進入主頁...")


n = Normal()
m = Member()
a = Admin()

login(n)
login(m)  # 報錯
login(a)

 2、使用抽象類(不推薦

  • 使用抽象類描述父類,在抽象類中給出一個抽象方法。這樣子類就不得不給出抽象方法的具體實現,不然報錯,也能夠起到約束的效果

1. 抽象類

  • python不能直接實現抽象類,需藉助abc模塊實現,ABCMeta是實現抽象基礎類的元類,由它生成抽象類,只能被繼承,不能實例化。
  • 抽象類不能建立對象
  • 抽象類中能夠有正常的方法
  • 子類必須重寫父類中的抽象方法,不然子類也是一個抽象類
  • 接口:類中所有方法都是抽象方法
  • 若是一個類中包含了抽象方法。那麼這個類必定是一個抽象類
from abc import ABCMeta, abstractmethod


class Base(metaclass=ABCMeta):
    @abstractmethod
    def login(self):
        pass


class Normal(Base):

    def login(self):
        pass


class Member(Base):

    def denglu(self):
        pass


class Admin(Base):

    def login(self):
        pass


n = Normal()
n.login()

m = Member()  # 報錯 Can't instantiate abstract class Member with abstract methods login  
m.login()

a = Admin()
a.login()
相關文章
相關標籤/搜索