我试图实现一个从int继承的类,并向其中添加一些成员,但我发现派生类的实例无法正确复制(甚至深度复制)。如果参数顺序发生更改,请参见下面的示例,尝试创建一个正int类:
# Example 1
import copy as cp
class PositiveInt(int):
def __new__(cls, arg = 1, arg0 = 2, arg1 = 3):
if arg < 0:
arg = -arg
return super(PositiveInt, cls).__new__(cls, arg)
def __init__(self, arg = 1, arg0 = 2, arg1 = 3):
self.arg0 = arg0
self.arg1 = arg1
n = PositiveInt(3, 4, 5)
m = cp.copy(n)
print(n, n.arg0, n.arg1)
print(m, m.arg0, m.arg1)
将打印:
(3、4、5)
(3、4、5)
# Example 2
class PositiveInt(int):
def __new__(cls, arg0 = 2, arg = 1, arg1 = 3):
if arg < 0:
arg = -arg
return super(PositiveInt, cls).__new__(cls, arg)
def __init__(self, arg0 = 2, arg = 1, arg1 = 3):
self.arg0 = arg0
self.arg1 = arg1
n = PositiveInt(4, 3, 5)
m = cp.copy(n)
print(n, n.arg0, n.arg1)
print(m, m.arg0, m.arg1)
将打印:
(3、4、5)
(1、4、5)
唯一的区别是争论的顺序。在示例2中,copy将使用默认值arg在new中实例化,但在示例1中不是这样。你知道吗
m = cp.copy(n)
最后调用了m = PositiveInt(n)
,而后者又调用了m=PositiveInt(3)
您可以将
__copy__
子类化或者您可以检查
__new__
中的第一个参数(也许。。。我真的不认为这会起作用)。。。但实际上你应该把__copy__
子类化相关问题 更多 >
编程相关推荐