首页 > 解决方案 > Python继承-不调用子类逻辑

问题描述

在我的示例中,C1 类和 C2 类都继承自 Base 类。在 Base::run(self) 方法中,我调用了在 C1 和 C2 中重载的 self.__run1 和 self.__run2 方法。

我看不到执行 C1::__run1 和 C2::__run2 方法的方法。

class Base(object):
    def __run1(self):
        pass

    def __run2(self):
        pass

    def run(self):
        self.__run1()
        self.__run2()


class C1(Base):
    def __run1(self):
        print("C1 run1")

class C2(Base):
    def __run2(self):
        print("C2 run2")

o1 = C1()
o2 = C2()

o1.run()
#how to make it return C1 run1?
o2.run()
#how to make it return C2 run2?

标签: pythonpython-3.xinheritance

解决方案


__methods是私人的。被_methods隐藏和保护。使用_run1()_run2()

例子

class Base(object):
    def _run1(self): # protected
        pass

    def __run2(self): # private
        pass

    def run(self):
        self._run1()
        self.__run2()


class C1(Base):
    def _run1(self): # overrides old _run1
        print("C1 run1")

class C2(Base):
    def __run2(self): # declares new __run2
        print("C2 run2")

o1 = C1()
o2 = C2()

o1.run()
o2.run()

这将导致:

C1 run1

推荐阅读