【发布时间】:2021-11-01 15:52:54
【问题描述】:
sn-p:
class Base:
def superclass_only(self):
return 'yes'
class Foo(Base):
pass
foo = Foo()
>>> foo.superclass_only()
yes
# Expection is to raise error
>>> foo.superclass_only()
traceback
...
AttributeError: 'Foo' object has no attribute 'superclass_only'
如果我只想定义一个只包含超类的方法,我该怎么做?
【问题讨论】:
-
好的,但是你希望什么时候拨打
superclass_only()是合法的? -
没有这样的东西。任何子类都是超类,这意味着您应该能够在任何可以使用超类实例的地方使用子类的实例。这种行为会打破这个基本假设。如果它是超类中的 internal 调用,则可以使用
__名称修饰来执行此操作,但在您的示例中,该方法是一个公共方法,预计将成为任何Base的公共接口的一部分及其所有子类。 -
@quamrana 我只希望超类调用方法,但子类
-
你破坏了Liskov substitution principle。当然有时你必须打破它,但要小心。
标签: python oop methods superclass