在python中调用__str__方法的super()?

时间:2017-12-13 16:22:01

标签: python string python-3.x class

我已经玩了几天OOP,现在我正在努力了解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)

所以我希望Taxi类中的__str__函数返回给定的值,然后返回子类中的字符串类以返回最后一个值。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

您完全忽略了对__str__超类定义的调用结果。你可能想要一些

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

调用super().__str__()并没有做任何神奇的事情。它只是另一种方法调用,因此您需要以这种方式对待它。除非您这样做,否则返回值不会神奇地吸收到您的方法中。