【问题标题】:Call super() on __str__ method in python?在 python 中的 __str__ 方法上调用 super()?
【发布时间】:2018-05-27 14:58:57
【问题描述】:

我已经玩了几天的 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__ 函数返回给定的值,然后子类中的字符串类返回最后一个值。

我该怎么做?

【问题讨论】:

  • super(Taxi, self).__str__() 返回一个字符串,您完全忽略了它。你不能只调用它,你需要对结果做一些事情,如你所说的另一篇文章所示没有帮助。
  • 我不知道你为什么投了反对票。这是一个明确的问题,无论多么简单,显然您自己也付出了一些努力。
  • @MadPhysicist:同意。很多教程只展示了调用super().__init__(...)的例子,它没有返回值。所以这种混乱是完全可以理解的。

标签: python string python-3.x class


【解决方案1】:

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

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

调用super().__str__() 并没有什么神奇的。它只是另一个方法调用,所以你需要这样对待它。除非您这样做,否则返回值不会神奇地吸收到您的方法中。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2015-04-18
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多