Python 是否可以创建一个继承自复杂类的类,但根据额外的参数计算值
问题描述
我试图创建一个继承自复杂类的自定义类,但我无法实现我想要的效果。以下是一个代码示例:
class MyComplex(complex):
def __init__(self, real, imag, imag2):
super().__init__(real, imag + imag2)
# Create an instance of MyComplex with custom initialization parameters
my_complex = MyComplex(3.0, 4.0, 5.0)
# You can now use my_complex just like a regular complex number
print(my_complex) # Output: (3+4j)
print(my_complex.real) # Output: 3.0
print(my_complex.imag) # Output: 4.0
但是这会返回一个 TypeError: complex() takes at most 2 arguments (3 given)
如果我尝试使用 __new__()
函数,那么我可以创建继承类,但是无法在 __init__()
函数中使用更多的参数来初始化值或更新值,因为它会返回一个 AttributeError: readonly attribute
是否有方法可以实现我的目标?
解决方案
是的,但请记住 complex
是一个不可变对象,因此无法像对可变(用户定义)类那样进行继承。相反,可以通过双下划线操作符 new
实现:
class MyComplex(complex):
def __new__(self, real, imag, imag2):
return super(MyComplex, self).__new__(self, real, imag+imag2)
请注意,这样定义后,您的第一个打印语句将返回
(3+9j)
您还应注意,为了使运算符返回正确的类型,您需要重载它们。例如
print(MyComplex(1.0, 2.0, 3.0) + MyComplex(2.0, 3.0, 4.0))
将会打印(3+12j)
,这是一个complex
类型的对象,而不是你一开始希望的MyComplex
。