Python 是否可以创建一个继承自复杂类的类,但根据额外的参数计算值

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程