擅长:python、mysql、java
<p>您只需要在<code>Top</code>(parent/base)类中有if语句:</p>
<pre><code>class Top:
def __init__(self, optional=None):
if optional is not None:
self.optional = optional
# (you don’t need an explicit return in __init__)
class Middle(Top):
def __init__(self, one, optional=None):
super().__init__(optional)
self.one = one
# this applies to Bottom class as well
</code></pre>
<p>现在不管你是否提供这个选项。假设您在调用<code>Middle</code>时没有选择,则<code>one</code>属性按预期设置,而<code>Top.__init__</code>是用<code>None</code>调用的,因为<code>Middle</code>中的默认参数将其设置为该属性(如果未提供)。由于在所有类中,您的参数缺省值都是<code>None</code>,因此基本上,optional的存在(或不存在)都会被执行。你知道吗</p>
<p>就我个人而言,我甚至不想包括if语句。我会将该属性设置为<code>None</code>,以便在稍后的代码中,如果您尝试访问<code>obj.optional</code>,则不会引发<code>AttributeError</code>。我认为,如果继承了子类,就应该通过子类保持属性的一致性,这样任何试图使用子类的人都会期望在<code>__init__</code>中使用的所有参数都通过调用继承链的大量<code>super()</code>被使用或设置为属性,并且不会丢失。你知道吗</p>