首页 > 其他分享 >面向对象之抽象类

面向对象之抽象类

时间:2024-01-13 23:37:14浏览次数:22  
标签:... abc 子类 self 面向对象 抽象类 def

【一】什么是抽象类

  • 抽象类是一种不能被实例化的类,它充当了一种模板或者说是蓝图。在抽象类中,你可以定义一些抽象方法,这些抽象方法没有具体的实现,即没有方法体。它们必须在抽象类的子类中被实现,除非那个子类也是一个抽象类。抽象类可以包含具体方法(已实现的方法)和抽象方法(未实现的方法)。

【二】为什么要有抽象类

  • 如果不想用鸭子类型,就想用父类来达到规范子类的效果,就可以引入这个抽象类

  • 代码重用和分离:抽象类允许你定义一些子类应该拥有的通用方法和属性,从而避免代码重复。

  • 设计约束和规范:它为其他类提供一个共同的父类,确保所有子类都遵循相同的基本设计,强制子类实现特定的方法。

  • 强化架构:使用抽象类可以使得软件架构更加清晰,强化各个类之间的关系和职责。

【三】如何使用抽象类

【1】导入模块

# 一切皆文件
# 利用abc模块实现抽象类
import abc  

【2】不按照抽象类规范来就会报错

import abc


class Car(metaclass=abc.ABCMeta):


    @abc.abstractmethod
    def run(self):
        ...

    @abc.abstractmethod
    def music(self):
        ...


class Benz(Car):
    def run(self):
        ...



car_1 = Benz()
"""
Traceback (most recent call last):
  File "D:\python28\面向对象\导读.py", line 297, in <module>
    car_1 = Benz()
            ^^^^^^
TypeError: Can't instantiate abstract class Benz with abstract method music
进程已结束,退出代码1
"""
  • 这里Benz子类没有按照抽象类的规范,没有music()方法,所以就会报错

【3】按照抽象类的规范来

import abc


class Car(metaclass=abc.ABCMeta):


    @abc.abstractmethod
    def run(self):
        ...

    @abc.abstractmethod
    def music(self):
        ...


class Benz(Car):
    def run(self):
        ...

    def music(self):
        ...

car_1 = Benz()


  • 只有和父类一模一样,才不会报错

【四】抽象类与接口

  • 抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。
  • 抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计

标签:...,abc,子类,self,面向对象,抽象类,def
From: https://www.cnblogs.com/Hqqqq/p/17963200

相关文章

  • 面向对象之多态和鸭子类型
    【一】多态【1】什么是多态指一类事物有很多形态【2】示例比如汽车是一类,它于很多形态,如奔驰宝马奥迪classCar:defrun(self):print('开始跑')classBenz(Car):defrun(self):super().run()print('98加满')classBwm(Car......
  • 面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以判断,取出和修改其本地状态或行为的能力在python中,反射主要是指通过字符串操作对象属性【2】Python中的反射同过字符串的形式操作对象相关的属性python一切皆为对象,都可以使用反射【二】反射方法【1】反射方法介绍getatt......
  • 面向对象之绑定方法和非绑定方法
    【一】绑定方法与非绑定方法介绍【1】绑定方法绑定给谁,谁调用就将谁作为第一个参数传入(1)绑定到类的方法使用classmethod装饰器来装饰将类作为第一个参数传入对象也可调用,会将实例化对象的类作为第一个参数传入(2)绑定到对象的方法通过对象.方法的方法实现,将对象作为......
  • 面向对象之元类
    【一】常用的魔法方法【1】初始化对象的属性__init__【二】元类【1】什么是元类一切源于一句话:Python中一切皆对象八大基本数据类型是对象类实例化得到的对象也是对象其实类本身也是一种对象classHuman:def__init__(self,name,age):self.name=name......
  • 面向对象之封装
    【一】面向对象三大特性面向对象编程有三大特性:封装、继承、多态其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起【1】什么是封装就是对具体对象的一种抽象简单理解就是把不想让别人看到的对象藏起来【2】为什么要封装有些敏感数据不想......
  • 抽象类
    概述abstract修饰符可以用来修饰方法也可以用来修饰类。如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。 抽象方法,只有方......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......
  • Python面向对象之派生
    派生【一】概要"派生"(Derivation)是指在面向对象编程中,通过创建新的类,基于已有的类(通常称为父类或基类)来构建新的类,以获取和扩展父类的属性和方法。在这个过程中,新创建的类称为子类或派生类。通俗来讲,派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法【......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......