我正在try 创建一个从复杂类继承的自定义类,但我无法实现我想要的.下面是一个代码示例:

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)

如果我try 使用__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)

请注意,这样定义的第一条print语句返回(3+9j).

new vs init:https://builtin.com/data-science/new-python

您还应该注意,您需要重载运算符,以便它们返回正确的类型.例如

print(MyComplex(1.0, 2.0, 3.0) + MyComplex(2.0, 3.0, 4.0))

将打印(3+12j),这是一个complex类型的对象,而不是您一开始可能希望的MyComplex.

Python相关问答推荐

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

如何匹配3D圆柱体的轴和半径?

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

过载功能是否包含Support Int而不是Support Int?

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

Python中MongoDB的BSON时间戳

剧作家Python没有得到回应

LAB中的增强数组

比较两个二元组列表,NP.isin

仅从风格中获取 colored颜色 循环

大Pandas 胚胎中产生组合

难以在Manim中正确定位对象

输出中带有南的亚麻神经网络

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

avxspan与pandas period_range

所有列的滚动标准差,忽略NaN

什么是最好的方法来切割一个相框到一个面具的第一个实例?

下三角形掩码与seaborn clustermap bug

Python Pandas—时间序列—时间戳缺失时间精确在00:00