python - 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?
解决方案
__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
推荐阅读
- unity3d - 传感器融合对于实现手机游戏是否必不可少?
- django - 无法将 django 应用程序推送到 Heroku
- twitter - 如何使用 Twitter API 从某个国家/地区获取所有推文?
- c - 结构数组的最后一个元素 - C
- spring - 创建 URL 中定义的名称为“BitronixTransactionManager”的 bean 时出错
- python - 根据csv文件中的主键计算数量的平均值
- sql - 此 SQL 查询的目的和功能是什么?
- mysql - 如何在spring boot data jpa中使用一种以上的数据库?
- r - 使用 dplyr 和 augment 预测值
- android - 应用程序隐私政策