子类继承父类的属性和方法:子类可以继承父类中的公共或保护的属性和方法。这意味着子类可以访问和使用父类已定义的字段、属性和方法,无需重新实现他们。
子类可以添加新的属和方法:子类可以在继承父类的基础上添加新的属性和方法,以满足自己的特定需求。这样就可以在不修改父类的情况下扩展功能
子类可以覆盖父类的方法:子类可以根据需要覆盖父类中的方法,以提供自己的实现。这被称为方法的重写或覆盖。通过重写父类的方法,子类可以改变方法的行为,实现自己的逻辑。
子类可以形成继承层次结构:* *** 通过多层次的基础, 可以形成一个继承层次结构。每个子类都可以有自己的子类,从而形成一个类的层次结构。
继承是面向对象编程中的一种重要机制,它提供了代码复用、可扩展性和灵活性。通过继承,可以设计出更加模块化、易于维护和扩展的代码结构。
class Plant:
def __init__(self,flower):
self.flower = flower
def peak(self):
print(f'这是一朵{self.flower}')
# 子类继承父类
class Pose(Plant):
def __init__(self,flower):
# 调用父类的构造函数
super().__init__(flower)
def fill(self):
# 重写父类的方法
print(self.flower + '先种花先挖坑!')
# 子类继承子类
class Sakura(Pose):
def __init__(self,flower):
super().__init__(flower)
def speak(self):
# 子类添加新的方法
print(self.flower + '正在挖坑')
# 创建对象并调用方法
plant = Plant('植物')
plant.peak()
# 这是一朵植物
pose = Pose('玫瑰')
pose.fill()
# 玫瑰先种花先挖坑!
sakura = Sakura('樱花')
sakura.speak()
# 樱花正在挖坑
在Python 2.x中, 存在着经典类和新式类的概念。
在Python 3.x中, 只有新式类
经典类是指没有显示继承自object
类的类,而新式类则是显式继承自object
类的类。在 Python 2.x 中,如果一个类没有显式地继承自object
类,那么它就被视为经典类
而在 Python 3.x 中,所有的类都隐式地继承自object
类,因此都是新式类。
支持新的类属性和特殊方法:
支持描述符, 可以对属性进行更加啊灵活的控制
支持方法解析顺序(MRO),可以更好地处理多继承的情况
经典类:类的定义不继承自 object
类。例如:class MyClass:
。
新式类:类的定义显式或隐式地继承自 object
类。例如:class MyClass(object):
或 class MyClass:
经典类:采用深度优先搜索(Depth-First Search,DFS)的方式来确定方法的调用顺序。
新式类:采用广度优先搜索(Breadth-First Search,BFS)的方式来确定方法的调用顺序
经典类:属性的访问是通过遍历每个父类,并按照继承顺序查找属性。
新式类:属性的访问是通过 C3 线性化算法计算出的 MRO 来决定属性的查找顺序。
经典类:super()
函数只能用于绑定最近父类的方法。
新式类:super()
函数可以用于调用任意父类的方法。
# 经典类
class A:
pass
# 新式类
class B(object):
pass
# 输出类的类型
print(type(A)) # <type 'classobj'>
print(type(B)) # <class 'type'>
object
类,因为所有的类都被认为是新式类。所以,Python 3 中的类默认都具有新式类的特性。