Ich versuche eine Klasse zu implementieren, die von int geerbt wurde und einige Member hinzufügt, aber ich finde die Instanz von der abgeleiteten Klasse kann nicht korrekt kopiert werden (sogar tiefe Kopie), wenn sich die Reihenfolge der Argumente ändert, siehe Beispiel unten, versuchen, eine positive int-Klasse erstellen:Python-Vererbung von unveränderbarer Klasse int, warum die Reihenfolge der Argumente beim Kopieren wichtig ist?
# 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)
Dies drucken:
(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)
Dies drucken:
(3, 4, 5)
(1, 4, 5)
Der einzige Unterschied ist die Reihenfolge der Argumente. Es scheint in Beispiel 2, verwenden kopieren Sie den Standardwert von arg für Instanziierung in neuen, aber dies ist nicht der Fall in Beispiel 1.