J'ai une situation similaire, à la différence que la nouvelle classe ne doit copier que les attributs. Ainsi, en utilisant l'idée de @Dunham et en ajoutant un peu de spécificité à la suggestion de @meisterluk, la méthode "copy_constructor" de @meisterluk pourrait être :
from copy import deepcopy
class Foo(object):
def __init__(self, myOne=1, other=None):
self.two = 2
if other <> None:
assert isinstance(other, Foo), "can only copy instances of Foo"
self.__dict__ = deepcopy(other.__dict__)
self.one = myOne
def __repr__(self):
out = ''
for k,v in self.__dict__.items():
out += '{:>4s}: {}, {}\n'.format(k,v.__class__,v)
return out
def bar(self):
pass
foo1 = Foo()
foo2 = Foo('one', foo1)
print '\nfoo1\n',foo1
print '\nfoo2\n',foo2
Le résultat :
foo1
two: <type 'int'>, 2
one: <type 'int'>, 1
foo2
two: <type 'int'>, 2
one: <type 'str'>, one
0 votes
La question suivante pourrait vous intéresser [avertissement : c'est moi qui l'ai posée] : stackoverflow.com/questions/990758/
0 votes
Faites attention. Les avertissements affichés par certains des répondeurs ne sont pas à sous-estimer.
0 votes
Cela n'a pas l'air très lisible, je vais probablement changer mon code en utilisant l'héritage pour encapsuler l'autre objet à la place.