【发布时间】:2018-04-24 18:07:16
【问题描述】:
在覆盖python抽象方法时,有没有办法在方法签名中使用额外的参数来覆盖该方法?
例如
摘要 class=
Agent(ABC):
@abstractmethod
def perceive_world(self, observation):
pass
继承类:
Dumb_agent(Agent):
def perceive_world(self, observation):
print('I see %s' % observation)
在方法签名中使用额外参数继承类:
Clever_Agent(Agent):
def perceive_world(self, observation, prediction):
print('I see %s' % observation)
print('I think I am going to see %s happen next' % prediction)
【问题讨论】:
-
好吧,如果你尝试一下会发生什么?
-
虽然您可以,但请不要。这将是令人困惑和容易出错的。人们会期望代理有一个 1 参数
perceive_world方法。 -
如果您希望它完全有用,您可能希望抽象方法采用额外的参数(可能使用默认值,甚至可能使用不希望该参数断言的类他们得到了默认值)。否则,知道一个对象遇到代理 ABC 并不能真正告诉你如何使用它,那为什么还要有一个 ABC?
-
或者,或者,只是让 Clever_Agent 为额外参数提供一个默认值,如果默认值被传递,让它做一些合理的事情。
-
@pseudogram 在像 Java 这样的语言中,这不算作接口方法的实现。在 Python 中,它_会_——但只是偶然的。