python 抽象類和接口

可以通過普通類實現接口,但是並沒有起到規範作用,繼承者可以選擇實現或不實現

# 普通類定義接口
# class Animal(object):
#     def say(self):
#         pass
#     def eat(self):
#         pass

通過abc模塊來創建,類似於java中的abstract class

# 通過`abc`模塊來創建
# import abc
# class Animal(metaclass=abc.ABCMeta):
#     @abc.abstractmethod
#     def say(self):
#         pass
#     def eat(self):
#         print("eat food")


# # a = Animal() # 抽象類不能被實例化

# class Dog(Animal):
#     def say(self):
#         print("dog")

# dog = Dog()
# dog.say()
# dog.eat()

類似於java中的interface

# 接口,所有方法都是抽象方法的抽象類
import abc
class Person(metaclass = abc.ABCMeta):
    @abc.abstractmethod
    def say(self):
        pass
    @abc.abstractmethod
    def eat(self):
        pass

class Teacher(Person):
    def say(self):
        print("teacher")

    def eat(self):
        print("shitang")

teacher = Teacher()
teacher.say()
teacher.eat()
比較點 普通類 抽象類 接口
實例化 yes no(只有子類可以,需要子類實現所有父類的抽象方法,否則子類必須還是抽象類) no(只有子類可以,需子類實現所有接口方法)
方法聲明和實現 只能實現 可以聲明和實現 只能聲明
是否全部實現 無關 如果不全部實現,則子類仍是抽象類 如果不能全部實現,子類必須是抽象類
是否有抽象方法 無關 有一個抽象方法既是抽象類,可以無抽象方法 必須有抽象方法
繼承 無關 只能單繼承(extend) 可以多繼承(interface)

參考:
https://www.cnblogs.com/leeego-123/p/11378108.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章