python继承父类的调用

本文通过一个具体的Python代码示例,介绍了如何在一个派生类中实现对多个基类的继承,并解释了方法解析顺序(MRO)的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中的一个派生类集成多个基类时候。实例化派生类对象后调用方法。如下代码


class BaseRequest:
    pass

class RequestHandler(BaseRequest):
    def process_request(self):
        print("RequestHandler.process_request")

    def serve_forever(self):
        print("RequestHandler.serve_forever")
class Minx:
    def process_request(self):
        print("minx.process_request")
class Son(Minx,RequestHandler):
    pass

obj=Son()
obj.process_request()

 示例中Son派生类分别继承Minx和RequestHandler,当调用父类中的方法时候查找顺序如下图所示

如果所示从左开始找找不到返回从头开始找右继承开始查找

 

 

同一个根的时候最后查找根

 

 

转载于:https://www.cnblogs.com/FashionDoo/p/9325540.html

### Python 中子类继承父类 `__init__` 方法的方式 在 Python 中,当一个子类需要继承父类的初始化方法 (`__init__`) 时,可以通过多种方式实现。以下是几种常见的情况及其处理方法: #### 情况一:子类未定义自己的 `__init__` 方法 如果子类没有显式定义自己的 `__init__` 方法,则会在实例化子类时自动调用父类的 `__init__` 方法[^3]。 ```python class Parent: def __init__(self, name): self.name = name def greet(self): print(f"Hello from {self.name}") class Child(Parent): pass child_instance = Child("Tom") # 自动调用了Parent的__init__ child_instance.greet() ``` #### 情况二:子类重新定义了自己的 `__init__` 方法 如果子类定义了自己的 `__init__` 方法,则默认情况下不会自动调用父类的 `__init__` 方法。因此,为了确保父类的初始化逻辑被执行,可以使用 `super()` 函数来显式调用父类的 `__init__` 方法。 ```python class Parent: def __init__(self, name): self.name = name class Child(Parent): def __init__(self, name, age): super().__init__(name) # 调用父类的__init__方法并传递参数 self.age = age child_instance = Child("Jerry", 10) print(child_instance.name, child_instance.age) ``` 在此例子中,`super().__init__(name)` 显式调用父类的 `__init__` 方法,并将必要的参数传递给它[^3]。 #### 使用 `super()` 的优势 `super()` 是一种更灵活的方式来访问父类的方法,尤其是在多重继承的情况下更为有用。它可以动态解析当前类链中的下一个基类,从而避免硬编码父类名称带来的维护困难[^4]。 ```python class A: def __init__(self): print("A's constructor") class B(A): def __init__(self): super().__init__() print("B's constructor") b_instance = B() # 输出顺序:A's constructor -> B's constructor ``` 在这个例子中,`super()` 动态地找到了 `A` 类作为 `B` 的直接父类,并调用了它的构造函数[^4]。 --- ### 总结 - 如果子类不重写 `__init__` 方法,则会自动调用父类的 `__init__` 方法。 - 当子类重写了 `__init__` 方法时,需手动通过 `super()` 来调用父类的 `__init__` 方法以完成初始化过程。 - 使用 `super()` 可提高代码可读性和灵活性,尤其适用于复杂的继承结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值