<p>您的实例具有以下属性:</p>
<pre><code>self.color = color
self.model_number = model_number
self.average = average
self.milage = milage
</code></pre>
<p>那些<em>掩码</em>您定义的方法;方法只是更多的属性,但是Python首先查看实例,然后才查看类以查找属性:</p>
<pre><code>>>> lambor = Lambo("Red", 2016, 20, 8)
>>> lambor.color
'Red'
</code></pre>
<p>您没有调用<code>Lambo.color()</code>方法,而是试图调用字符串<code>'Red'</code>。重命名在<code>__init__</code>中设置的属性,或者重命名方法。你知道吗</p>
<p>可以对每个名称使用一个前导下划线来删除冲突,并记录该属性仅在类内部使用:</p>
<pre><code>class Lambo:
def __init__(self, color, model_number, average, milage):
self._color = color
self._model_number = model_number
self._average = average
self._milage = milage
def color(self):
print("Lamborghini color is " + self._color)
def model_number(self):
print("Lamborghini model number is " + str(self._model_number))
def average(self):
print("Lamborghini average is " + str(self._average))
def milage(self):
print("Lamborghini milage is " + str(self._milage))
</code></pre>
<p>或者,重命名<em>方法</em>来说明它在做什么;在它们前面加上<code>print_</code>:</p>
<pre><code>class Lambo:
def __init__(self, color, model_number, average, milage):
self.color = color
self.model_number = model_number
self.average = average
self.milage = milage
def print_color(self):
print("Lamborghini color is " + self.color)
def print_model_number(self):
print("Lamborghini model number is " + str(self.model_number))
def print_average(self):
print("Lamborghini average is " + str(self.average))
def print_milage(self):
print("Lamborghini milage is " + str(self.milage))
lambor = Lambo("Red", 2016, 20, 8)
lambor.print_color()
lambor.print_model_number()
lambor.print_average()
lambor.print_milage()
</code></pre>
<p>一般来说,不应该让类负责这样的输出。通常给类一个<code>__str__</code>方法,该方法可以生成一个用户友好的字符串,然后在实例上打印调用<code>str()</code>,或者直接将其发送到<code>print()</code>函数:</p>
<pre><code>class Lambo:
def __init__(self, color, model_number, average, milage):
self.color = color
self.model_number = model_number
self.average = average
self.milage = milage
def __str__(self):
lines = [
"Lamborghini color is " + self.color,
"Lamborghini model number is " + str(self.model_number),
"Lamborghini average is " + str(self.average),
"Lamborghini milage is " + str(self.milage)
]
return '\n'.join(lines)
lambor = Lambo("Red", 2016, 20, 8)
print(lambor)
</code></pre>