46----接口,abc抽象类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c_first/article/details/81676976

接口

  • 一个接口代表的就是一个功能
  • 把复杂的逻辑隐藏起来,提供一个接口给外界使用

生活中的接口

  • 电视机开关,按一下打开,按一下关闭,不需要关心它是怎么做到的,用就行了,这个开关就是个接口

java中有专门定义接口的关键字interface

python中没有定义接口的关键字

  • python通过继承来模拟接口,父类定义好应该有哪些接口,子类去实现
class Animal:   # 定义接口,相当于java的interface,模仿接口的概念
    def eat(self):      # 定义接口函数eat
        pass

    def run(self):      # 定义接口函数run
        pass

class  People(Animal):
    def eat(self):         # 实现eat方法
        print("eat")

    def run(self):           # 实现run方法
        print("run")

class Dog(Animal):
    def eat(self):         # 实现eat方法
        print("eat")

    def run(self):           # 实现run方法
        print("run")

p = People()
p.run()

d = Dog()
d.eat()

但是上面的有个问题,People类和Dog类中实现的方法,没有受到父类的约束,不去实现也可以

接口统一的原则,父类定义好的接口,子类是必须要去实现的,而且实现的方法必须跟父类的定义的名字一样

class Animal:   # 定义接口,相当于java的interface,模仿接口的概念
    def eat(self):      # 定义接口函数eat
        pass

    def run(self):      # 定义接口函数run
        pass

class  People(Animal):
    def talk(self):
        print("talk")


class Dog(Animal):

    def talk(self):
        print("talk")

p = People()
p.run()
p.talk()    # talk

d = Dog()
d.eat()
d.talk()    # talk

抽象类

  • 使用 abc模块,父类限制子类必须实现父类定义的接口,且名字必须一样
import abc
class Animal(metaclass=abc.ABCMeta):   # 定义接口,相当于java的interface,模仿接口的概念
    @abc.abstractclassmethod
    def eat(self):      # 定义接口函数eat
        pass
    @abc.abstractclassmethod
    def run(self):      # 定义接口函数run
        pass

class  People(Animal):
    def talk(self):
        print("talk")

class Dog(Animal):

    def talk(self):
        print("talk")

p = People()
p.run()
p.talk()

d = Dog()
d.eat()
d.talk()

# 没有实现父类的方法,报错
# TypeError: Can't instantiate abstract class People with abstract methods eat, run

实现父类的方法

import abc
class Animal(metaclass=abc.ABCMeta):   # 定义接口,相当于java的interface,模仿接口的概念
    @abc.abstractclassmethod
    def eat(self):      # 定义接口函数eat
        pass
    @abc.abstractclassmethod
    def run(self):      # 定义接口函数run
        pass

class  People(Animal):

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

    def run(self):
        print("run")

    def talk(self):
        print("talk")

class Dog(Animal):

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

    def run(self):
        print("run")

    def talk(self):
        print("talk")

p = People()
p.run()
p.talk()

d = Dog()
d.eat()
d.talk()

# run
# talk
# eat
# talk

猜你喜欢

转载自blog.csdn.net/c_first/article/details/81676976
今日推荐