あなたのインスタンスは以下の属性があります:あなたが定義されて
self.color = color
self.model_number = model_number
self.average = average
self.milage = milage
これらマスク方法を。方法は、単により多くの属性ですが、Pythonは、属性を見つけるために、クラスで唯一の最初のインスタンスを見て、:
>>> lambor = Lambo("Red", 2016, 20, 8)
>>> lambor.color
'Red'
あなたは文字列'Red'
を呼び出そうとしている、Lambo.color()
メソッドを呼び出していません。 __init__
に設定した属性の名前を変更するか、メソッドの名前を変更します。また
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))
、どのようなことを述べるために方法の名前を変更します。
あなたが大手を使用することができますが衝突を削除し、属性が唯一の自分のクラスに内部的に使用されていることを文書化することの両方にそれぞれの名前のためにアンダースコアやっている。 print_
でそれらを接頭辞:
一般
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()
に言えば、あなたはこのような出力のためのクラスが責任を作るべきではありません。
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)
問題は、あなたの '__init__'方法ということです:あなたは、通常クラスにそのインスタンスに
str()
を呼び出すか、直接print()
機能に送信し印刷し、ユーザーフレンドリーな文字列を生成することができます__str__
方法を与えるだろう'color'インスタンス属性を持つ' color'メソッドをシャドウイングしています。インスタンス属性に '_color'のようなものを使用することをお勧めします。先頭のアンダースコアは、オブジェクトのプライベート属性に使用される規則です。 – Bakuriuところで、あなたの問題は何もしませんが、 'print'はあなたのために文字列化します:' print( "Lamborghiniのモデル番号は" self.model_number ")' – cdarke
@cdarke:Python 3または '__future__インポートprint_function'。文字列の '(...)'がPython 2の 'print'文でうまく動作することを考慮してください。 –