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
相关产品推荐
相关产品推荐

