2017-12-13 12 views
2

私は2,3日間OOPで遊んでいましたが、今はsuper()メソッドの仕組みを理解しようとしています。pythonの__str__メソッドでsuper()を呼び出しますか?

問題は私が__str__関数を別のクラスから呼び出してスーパークラスのものを継承したいということです。

私はPython inheritance: Concatenating with super __str__を読みましたが、その解決策は機能しませんでした。

私が午前のコードは、この

class Taxi: 

    def __init__(self, drivername, onduty, cities): 
     self.drivername = drivername 
     self.onduty = onduty 
     self.cities = cities 

    def __str__(self): 
     return '{} {} {}'.format(self.drivername, self.onduty, self.cities) 

class Type(Taxi): 

    def __init__(self, drivername, onduty, cities, model): 
     super().__init__(drivername, onduty, cities) 
     self.model = model 

    def __str__(self): 
     super(Taxi, self).__str__() #Tried as well with super().__str__() 
     return '{}'.format(self.model) 

mymodel = Type('Foobar', True, 'Washington', 'Volvo') 
print(mymodel) 

ですだから私は与えられた値を返すためにタクシークラスで__str__機能を求めており、その後、サブクラス内の文字列クラスは、最後の値を返すように。

どうすればよいですか?

+1

'super(Taxi、self).__ str __()'はあなたが完全に無視している文字列を返します。あなたはそれを呼び出すことはできません。他の投稿に示されているように、結果*で何かをする必要があります。 – jonrsharpe

+0

私はなぜdownvoteを得たかわかりません。それは明確な質問ですが、初心者ですが、あなたは明らかにそれを理解するための努力をしています。 –

答えて

3

スーパークラスの定義__str__への呼び出しの結果を完全に無視しています。

def __str__(self): 
    prefix = super().__str__() 
    return '{} {}'.format(prefix, self.model) 

super().__str__()は何も魔法をかけません。これは単なる別のメソッド呼び出しなので、そのように扱う必要があります。あなたがそうしない限り、戻り値はあなたのメソッドに魔法のように吸収されません。

関連する問題