首页 > 编程语言 >python继承,多态和抽象类

python继承,多态和抽象类

时间:2024-11-29 20:59:02浏览次数:9  
标签:__ name python 子类 self 多态 抽象类 父类 def

python继承,多态和抽象类

继承

多个类拥有共同属性和方法时,可以抽取一个父类
继承语法:
子类(父类)
子类: 派生类
父类:基类
super():
如果子类与父类属性完全一致,可以自动调用
如果子类有自己特有的属性,要用super()调用父类 __init__方法,执行属性初始化
继承特点:
子类可以继承父类的非私有属性和方法
如果一个类没有继承任何类,它父类是object
重写:
当父类方法不满足子类的需求,子类就需要重写方法
重写规则:
函数名相同
参数列表相同
返回值类型相同

# 父类 (基类)
class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print(f'{self.name}在吃饭')

    def sleep(self):
        print('睡觉')


# 子类
class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)

    def sleep(self):
        print(f'{self.name}睡觉')

    # def show(self):  # 子类特有的方法
    #     pass


# 子类
class Teacher(Person):
    def __init__(self, name, age, sex):
        super().__init__(name, age)
        self.sex = sex

    def sleep(self):
        print(f'{self.name}睡觉,性别{self.sex}')


stu = Student('张三', 20)
tea = Teacher('黄蓉', 30, '女')
stu.eat()  # 自动继承父类的方法
tea.eat()

stu.sleep()
tea.sleep()

运行结果:
	张三在吃饭
	黄蓉在吃饭
	张三睡觉
	黄蓉睡觉,性别女

多态

多态: 多种不同形态,例如,水表现为 固体、液体、气体
多态的体现:
重写
父类作为形参

class Animal:
    def __init__(self, name):
        self.name = name


class Dog(Animal):
    pass


class Cat(Animal):
    pass


def cure(animal: Animal):
    print(f'{animal.name}打针')


cure(Cat('猫'))

运行结果:
	猫打针

抽象类

抽象类特点:

 抽象类不可以被实例化
 如果一个类中有抽象方法(没有方法体),那么这个类必须定义为抽象类
 子类必须重写父类的所有抽象方法,才能创建实例

在Python中,抽象类是一种不能被实例化的类,主要用于定义接口或基类,要求子类实现特定的方法。Python的抽象类是通过abc(Abstract Base Classes)模块来实现的。以下是如何定义和使用抽象类的详细步骤:

导入abc模块:
你需要从abc模块中导入ABC和abstractmethod。
定义抽象基类:
让你的类继承自ABC。
定义抽象方法:
使用@abstractmethod装饰器来标记那些必须在子类中实现的方法。

from abc import ABC, abstractmethod

# 定义一个抽象基类
class Shape(ABC):
    
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

# 定义一个子类,继承自抽象基类
class Rectangle(Shape):
    
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def area(self):
        return self.width * self.height
    
    def perimeter(self):
        return 2 * (self.width + self.height)

# 定义另一个子类,继承自抽象基类
class Circle(Shape):
    
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        import math
        return math.pi * self.radius ** 2
    
    def perimeter(self):
        import math
        return 2 * math.pi * self.radius

# 尝试实例化抽象基类(会引发错误)
# shape = Shape()  # TypeError: Can't instantiate abstract class Shape with abstract methods area, perimeter

# 实例化子类
rectangle = Rectangle(4, 5)
circle = Circle(7)

print(f"Rectangle Area: {rectangle.area()}")
print(f"Rectangle Perimeter: {rectangle.perimeter()}")
print(f"Circle Area: {circle.area()}")
print(f"Circle Perimeter: {circle.perimeter()}")```

标签:__,name,python,子类,self,多态,抽象类,父类,def
From: https://blog.csdn.net/wd18836095078/article/details/144145448

相关文章

  • PythonDay6Advance
    PythonDay6Advance模块、类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,....自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlib......
  • python球探数据分析
    Python球探数据分析入门指南作为一名刚入行的小白,你可能会对如何使用Python进行球探数据分析感到困惑。不用担心,这篇文章将为你提供一份详细的入门指南,帮助你逐步掌握这项技能。流程概览首先,让我们通过一个表格来了解整个数据分析的流程:步骤描述1获取数据2数据......
  • Day2 [Python学习] 简单数据类型:字符串
    1.含义:字符串就是一系列字符。简单来说,就是被单引号'或者是双引号"括起来的内容,eg:"HelloPython"'HelloCSDN----'HelloPython和HelloCSDN----是两个字符串那如果想在字符串里边加引号呢?'Itoldmyfriend,"CSDNisagreatlearningplatformforpython......
  • 大数据学习记录,Python基础(3)
    算术运算符a=3b=4print(a+b)#7print(a-b)#-1print(a*b)#12print(a/b)#0.75print(a%b)#3print(a**b)#81print(a//b)#0整除比较(关系)运算符注意:=是赋值运算符,==是比较运算符比较运算符的结果一定是bool类型的扩展知识:比较两个......
  • python小白语法基础17(函数)
    0)参考文章Python函数知识点(详解)-CSDN博客Python常用函数总结(77个)超全面超详细_python函数大全及详解-CSDN博客最全Python函数总结和应用(超详细+建议收藏),基本所有内置函数,心得都在这了,踩的坑也在里面了,最后还有函数的魂_python函数大全及详解-CSDN博客1)函数基础函数推......
  • 【Python-Open3D学习笔记】005Mesh相关方法
    TriangleMesh相关方法文章目录TriangleMesh相关方法1.查看mesh三角形面信息2.可视化三角形3.上采样4.计算mesh形成的面积和体积1.查看mesh三角形面信息defview_hull_triangles(hull:o3d.geometry.TriangleMesh):"""查看mesh三角形面信息(顶点索引......
  • 蓝桥杯备考冲刺必刷题(Python) | 3412 最小化战斗力差距
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】小蓝是机甲战队的队长,他手下共有$n$名队员,每名队员都有一个战斗力值$$w_i$$。现在他需要将这$$n$$名队友分成两组$$a$$和$$b$......
  • 蓝桥杯备考冲刺必刷题(Python) | 3236 小蓝的零花钱
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】小蓝和小桥正在玩一个游戏,他们有一个长度为$$n$$的序列,其中既有偶数也有奇数,且偶数和奇数的数量相等。小蓝有一些零花钱,他可......
  • 使用 Vyper 和 Python 进行自动化登录并处理验证码
    虽然Vyper本身并不适合直接处理网页自动化任务,但我们可以通过Vyper来编写控制逻辑,并利用Python进行验证码的处理和图像识别。我们的目标是创建一个智能合约,模拟通过调用Python脚本来完成验证码的识别与登录过程。环境准备要完成自动化登录并处理验证码,我们需要以下工具......
  • 使用 Nim 和 Python 自动化处理登录和验证码
    项目概述这个项目的目标是实现一个自动化登录过程,其中包括:使用Nim编写自动化脚本来控制浏览器。通过Selenium完成自动化操作。使用外部Python脚本处理验证码的识别。2.环境准备Nim编程语言:用于编写主脚本来自动化登录操作。Selenium(Python):用Python编写验证......