擅长:python、mysql、java
<p>您可以简单地按照您的建议来做:您可以在子类中添加一个额外的参数。在</p>
<p>但是这样做很可能会违反<a href="https://en.wikipedia.org/wiki/Liskov_substitution_principle" rel="nofollow noreferrer">substitution principle</a>,并可能导致错误和设计问题。一般来说,每次超类可用时,子类都是可用的。
也就是说,每当一个方法或函数需要一个<code>Agent</code>,您应该能够传入一个<code>CleverAgent</code>。
不幸的是,如果<code>CleverAgent</code>使用其他参数,那么在<code>Agent</code>上调用<code>perceive_world</code>的任何代码在给定<code>CleverAgent</code>时都将失败。在</p>
<p>有时需要在子类中添加一个可选的paremeter(具有默认值的paremeter)。如果某些代码要知道子类的特殊行为,并且该代码希望在与方法交互时利用这些知识,那么这可能是正确的方法。在</p>
<p>此外,在某些情况下,您正在使用子类化,而Liskov替换原则实际上并不是理想的属性。这种情况通常意味着,除了简单的子类型化之外,您还将语言的对象继承机制用于其他目的。如果你发现自己处在这样的情况下,这是一个很好的提示,你应该仔细检查你的设计,看看是否有一种方法可以更好地协调一致。在</p>