首页 > 编程语言 >python3 抽象类Abstract Classes

python3 抽象类Abstract Classes

时间:2023-03-21 20:12:17浏览次数:45  
标签:People 子类 Abstract Classes gender 抽象类 self man

python3 抽象类Abstract Classes

抽象类可以这么理解,它就是一个模板,里面声明了子类必须定义的函数,但是对于每个函数都没有给出具体实现。所有函数的实现都是在子类中定义。我们这里给出抽象类的定义方式:

from abc import ABC, abstractmethod

class 类名称(ABC):
    @abstractmethod
    def 方法名称(self):
        pass

我们先定义一个People抽象类:

from abc import ABC, abstractmethod

class People(ABC):
    @abstractmethod
    def gender(self):
        pass

可见,People类是ABC类的子类,ABC是Abstract Classes的简写,通过以上定义就可以声明People类是抽象类。如果我们要指定某个函数是People类的所有子类均需要定义的,我们就在这个函数上方添加@abstractmethod。通过这样定义,如果子类中没有该函数的具体实现过程程序就会报错。
然后我们创建子类Woman继承于父类People:

class Woman(People):
    def gender(self):
        print("This is a woman")

可见,子类Woman中给出了gender方法的具体实现过程。我们接下来对子类实例化:

woman = Woman()
woman.gender()
>>> This is a woman

当然,我们在重写抽象类中声明的函数时也可以传参:

class Man(People):
    def __init__(self, height):
        self.height = height
        
    def gender(self, country):
        print("This is a {} man".format(country))
    
    def description(self):
        print("This man is {}cm".format(self.height))

我们定义子类Man继承于父类People,并对gender函数进行实现,不同的是这里的gender函数需要外部传参。我们给出该类的实例化过程:

man = Man(height=170.2)
man.gender(country="Chinese")
man.description()
>>> This is a Chinese man
>>> This man is 170.2cm

https://learnku.com/docs/pymotw/abc-abstract-base-classes/3488

标签:People,子类,Abstract,Classes,gender,抽象类,self,man
From: https://www.cnblogs.com/michaelcjl/p/17241257.html

相关文章

  • 多态之抽象类
     当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法比如:狗狗会叫,猫咪也会叫,可以使用abstract关键字标记一个抽象的动物类,抽象的方法......
  • 具体类、抽象类、接口
    1. 综述    1)具体类    2)抽象类:含有抽象方法,不能被实例化    3)接口:一种更加特殊的抽象类2. 抽象类    1)抽象类和抽象方法都要使用a......
  • this关键字,多类合作,继承,多类合作的扩展,继承,重写和重载,抽象类声明
    1.this关键字字面意思:​ 这个​ 1.一般写在实体类中。表示的是当前的对象​ 可以使用this调用属性和方法​ 2.this关键字可以调用构造方法(很少用)​ ......
  • 说说对AQS(AbstractQueuedSynchronizer)队列同步器的理解
    AQS是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),包含了实现同步器的细节(获取同步状态、FIFO同步队列)。AQS的主要使用......
  • 4、抽象类和接口
    接口和抽象类,主讲:汤小洋一、final关键字final表示最终的,可以用来修饰变量、方法和类1.修饰变量被final修饰的变量,称为常量constant,常量的值不能被修改被staticfi......
  • C#封装FluentValidation,用了之后通篇还是AbstractValidator
    黑哥聊dotNetsharedonJun9,20223.8k10mins讲故事前几天看公司一个新项目使用了FluentValidation,大家都知道FluentValidation是一个非常强大的用于构建强类型验证规则的......
  • 一行一行源码分析清楚 AbstractQueuedSynchronizer(二)
    文章比较长,信息量比较大,建议在pc上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。本文关注以下几点内容:深入理解ReentrantLock公......
  • java进阶 抽象类30
     packagecom.cyjt97.Abstract;publicclassAbstract{publicstaticvoidmain(String[]args){}}abstractclassa{publicabstractvoideat......
  • 抽象类和抽象方法
    抽象类和抽象方法抽象方法:把共同的方法抽取到父类后,由于每一个子类执行的内容不一样,所父类不能确定方法的具体内容.就可以定义为抽象方法如果一个类中存在抽象方法,......
  • 静态类和非静态类 抽象类
    静态类和非静态类静态类只能是内部类,外部类不能用static修饰,内部类可以使用static修饰。创建方式:外部类.静态内部类对象名=外部类.new静态内部类();外部类对象名=ne......