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