擅长:python、mysql、java
<p>你;没错,您的第一个实现很容易混淆/出错-如果没有其他东西,那么在<code>Daughter2</code>中调用<code>bar</code>永远都不安全,除非其他东西已经设置了<code>self.i</code>。这将使测试、调试和记录变得很棘手</p>
<p>使<code>bar</code>成为一个打印类中定义的值或传递给该方法的值的方法可能更清楚。这意味着子类的实现要简单得多。例如:</p>
<pre><code>class Mother():
def foo(self):
for i in range(3):
print('Hello')
self.bar(i)
def bar(self, val):
if hasattr(self, 'print_val'):
val = self.print_val
print(val)
class Daughter1(Mother):
def __init__(self):
self.print_val = 'World'
class Daughter2(Mother):
pass
d1 = Daughter1()
d1.foo()
d2 = Daughter2()
d2.foo()
</code></pre>