<p>为了不重写父类中的代码,您可以执行以下操作,同时稍微更改子类:</p>
<pre><code>class Parent:
def __init__(self, eye_color, length):
self.eye_color = str(eye_color)
self.length = length
def display(self):
print('Eye color: {0} Length: {1}'.format(self.eye_color, self.length))
class Child(Parent):
def __init__(self, gender, parent):
super().__init__(parent.eye_color, parent.length)
self.gender = str(gender) #child slightly changed with the addition of new attribute
def display(self):
super().display()
print('Gender: {0}'.format(self.gender))
x = Parent("Blue", 2)
y = Child("Men", x)
print(x.length, x.eye_color)
print(y.gender, y.length)
x.display()
print()
y.display()
</code></pre>
<p><strong>输出</strong></p>
<pre><code>2 Blue
Men 2
Eye color: Blue Length: 2
Eye color: Blue Length: 2
Gender: Men
</code></pre>
<p>当子类中的方法与其超类中的方法(如方法<code>display()</code>)具有相同的名称、相同的参数或签名以及相同的返回类型(或子类型)时,则称子类中的方法覆盖了超类中的方法。执行的方法的版本将由用于调用它的对象确定</p>
<p>此外,如果您希望您的子类成为父类的副本,则只需执行以下操作:</p>
<pre><code>class Parent:
def __init__(self, eye_color, length):
self.eye_color = str(eye_color)
self.length = length
def display(self):
print('Eye color: {0} Length: {1}'.format(self.eye_color, self.length))
class Child(Parent):
pass
y = Parent ('stack',3)
x = Child('Overflow',2)
print(x.length, x.eye_color)
x.display()
y.display()
</code></pre>
<p>如果不想向类添加任何其他属性或方法,请使用<code>pass</code>关键字</p>
<p>您还可以通过以下操作更改和附加子类中超类的属性:</p>
<pre><code>class Child(Parent):
def __init__(self, gender, parent):
super().__init__(parent.eye_color, parent.length)
self.gender = str(gender)
parent.length += 2
x = Parent("Blue", 2)
y = Child("Men", x)
print(x.length, x.eye_color)
print(y.eye_color, y.length)
x.display()
y.display()
</code></pre>
<p>这将使长度增加2,从而将显示输出转换为:</p>
<pre><code>2 Blue
Blue 3
Eye color: Blue Length: 2
Eye color: Blue Length: 3
</code></pre>
<p>如果您想完全更改子类中的属性,而不是像上面那样递增/递减它,只需将<code>+=</code>符号替换为<code>=</code></p>
<p>关于如何在子类中追加和重用代码,您还有其他问题吗</p>