在其他魔法方法中使用魔法方法

问题描述

class Juice:
    def __init__(self,name,capacity):
        self.name = name
        self.capacity = capacity

    def __str__(self):
        return (self.name + ' ('+str(self.capacity)+'L)')
    def __add__(self,other):
        all_name = self.name + "&" + other.name
        all_capacity = self.capacity + other.capacity
        return(all_name+str(all_capacity))
a = Juice('Orange',1.5)
b = Juice('Apple',2.0)
result = a + b
print(result)

我想在 __str__ 中使用 __add__ 而不是 str() 。那我该怎么做呢?我可以吗?再次在返回行的 __add__ 中,我想使用魔术方法 str() 而不是原始 str()

解决方法

您遇到的问题是因为 str 没有在您的对象上被调用,而是在所有容量上被调用,这只是一个普通的 Float。

一个足够简单的选项是创建一个新对象。如果您不想这样做,则需要重构您的 __str__ 实现。以下是您可能执行的操作的示例。

class Juice:
    def __init__(self,name,capacity):
        self.name = name
        self.capacity = capacity

    def __str__(self):
        return (self.name + ' ('+str(self.capacity)+'L)')

    def __add__(self,other):
        all_name = self.name + "&" + other.name
        all_capacity = self.capacity + other.capacity
        return str(Juice(all_name,all_capacity))

a = Juice('Orange',1.5)
b = Juice('Apple',2.0)
result = a + b
print(result)

输出:

Orange&Apple (3.5L)