在另一个魔法方法中使用一个魔法方法
use a Magic Methods in an other Magic Methods
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)
我想在 __add__
中使用 __str__
而不是 str()
。那我该怎么做呢?我可以做吗?再次在 return 行的 __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)
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)
我想在 __add__
中使用 __str__
而不是 str()
。那我该怎么做呢?我可以做吗?再次在 return 行的 __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)