如何在派生的 class 中使用 super().__add__
how to use super().__add__ in a derived class
我的代码有效,但我不确定这是否是正确的实现方式。我正在尝试在派生 class 中使用基础 class“添加”方法。 super().__add__
returns 基数 class 因此我必须在返回之前以某种方式将 class 转换回派生类型。你能看一看并告诉我是否有更好/更好的方法来实现这个吗?
class a:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"{self.x} {self.y}"
def __add__(self, other):
return a(self.x + other.x, self.y + other.y)
class b(a):
def __init__(self, x, y, z):
super().__init__(x, y)
self.z = z
def __repr__(self):
str = super().__repr__()
return str + f" {self.z}"
def __add__(self, other):
temp = super().__add__(other)
new_z = self.z + other.z
return b(temp.x, temp.y, new_z)
谢谢!
李
您可以使 class b
的构造函数与基础 class 的构造函数兼容,方法是使附加参数 z
可选并具有默认值:
class b(a):
def __init__(self, x, y, z=0):
super().__init__(x, y)
self.z = z
这样基础 class 的 __add__
方法可以通过 self
对象的类型而不是硬编码的 class 实例化一个新对象:
class a:
def __add__(self, other):
return type(self)(self.x + other.x, self.y + other.y)
并且派生class的__add__
方法可以在返回之前直接修改基class的__add__
方法返回的对象:
def __add__(self, other):
temp = super().__add__(other)
temp.z = self.z + other.z
return temp
我的代码有效,但我不确定这是否是正确的实现方式。我正在尝试在派生 class 中使用基础 class“添加”方法。 super().__add__
returns 基数 class 因此我必须在返回之前以某种方式将 class 转换回派生类型。你能看一看并告诉我是否有更好/更好的方法来实现这个吗?
class a:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"{self.x} {self.y}"
def __add__(self, other):
return a(self.x + other.x, self.y + other.y)
class b(a):
def __init__(self, x, y, z):
super().__init__(x, y)
self.z = z
def __repr__(self):
str = super().__repr__()
return str + f" {self.z}"
def __add__(self, other):
temp = super().__add__(other)
new_z = self.z + other.z
return b(temp.x, temp.y, new_z)
谢谢! 李
您可以使 class b
的构造函数与基础 class 的构造函数兼容,方法是使附加参数 z
可选并具有默认值:
class b(a):
def __init__(self, x, y, z=0):
super().__init__(x, y)
self.z = z
这样基础 class 的 __add__
方法可以通过 self
对象的类型而不是硬编码的 class 实例化一个新对象:
class a:
def __add__(self, other):
return type(self)(self.x + other.x, self.y + other.y)
并且派生class的__add__
方法可以在返回之前直接修改基class的__add__
方法返回的对象:
def __add__(self, other):
temp = super().__add__(other)
temp.z = self.z + other.z
return temp