【发布时间】:2019-04-04 09:18:39
【问题描述】:
我们有以下类结构:
class NamePrinter():
def phone():
print(self.name)
def email():
print(self.name)
class PhoneCaller(NamePrinter):
def __init__(self, name, number, mail):
self.name = name
self.number = number
self.mail = mail
def phone(self):
# here, NamePrinter.phone() should be executed
compose_number(self.number)
def email(self):
# here, NamePrinter.email() should be executed
compose_mail(self.mail)
我希望在调用PhoneCaller.phone() 时执行NamePrinter.phone(),而不必在PhoneCaller 中提及super.phone()。
这个想法是,要应用于 PhoneCaller 以使其在执行 PhoneCaller.phone 时执行 NamePrinter 的行为的唯一修改是 PhoneCaller 从父级继承,仅此而已。特别是,无需修改任何单独的 PhoneCaller 方法。
简单地说:
- PhoneCaller 继承自 NamePrinter => 姓名在组成号码之前打印
- PhoneCaller 不从 NamePrinter 继承 => 名称不打印
- 无需乱搞PhoneCaller.phone
这可能吗?
【问题讨论】:
-
在
class NamePrinter中重命名为def _phone(self):,在def phone(self):中做self._phone()。 -
@stovfl 与调用 super() 有何不同?
-
前两个要点似乎暗示您可能会修改
PhoneCaller的基类。如果是这种情况,为什么不首先定义两个类,然后正确定义NamePrinter的子类呢?这似乎是一个巨大的 XY 问题。 -
参见
import this:“显式优于隐式。” -
@chepner 现实世界的场景是我们有几十个不同的子类,我们想要一个简单的开关来触发替代行为,这取决于这个开关是打开还是关闭
标签: python python-3.x class inheritance