You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多继承场景下,子类实例调用的parent_logger源自哪个父类?

问题解答

问题

假设我们有3个类,2个父类和1个继承自这两个父类的子类:

import logging
class A:
    def __init__(self):
        self.parent_logger = logging.getLogger("parent")
        
class B:
    def __init__(self):
        self.parent_logger = logging.getLogger("parent")
        
class C(A, B):
    def __init__(self):
        A.__init__(self)
        B.__init__(self)
        
test_class = C()
test_class.parent_logger.info("sample")

当实例化类C并调用其parent_logger时,该parent_logger来自哪个类?


解答

从代码执行顺序来看:

  • C的构造方法里先调用A.__init__,给test_class实例的parent_logger属性赋值;
  • 紧接着调用B.__init__,再次给同一个实例的parent_logger属性赋值,这一步会覆盖之前的赋值。

所以最终test_class.parent_logger是B类构造方法中赋值的那个。

不过要补充一点:logging.getLogger("parent")是单例实现,只要传入的日志名称相同,不管调用多少次,返回的都是同一个Logger对象实例。也就是说A和B的构造方法里获取的其实是同一个logger对象,只是B的赋值操作是最后执行的。


内容的提问来源于stack exchange,提问作者dataviews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:24:29