Homunculus Reticulli
Homunculus Reticulli

Reputation: 68436

Is this the equivalent of a copy constructor in Python?

I'm reviewing some old python code and came accross this 'pattern' frequently:

class Foo(object):
    def __init__(self, other = None):
        if other:
            self.__dict__ = dict(other.__dict__)

Is this how a copy constructor is typically implemented in Python?

Upvotes: 6

Views: 2730

Answers (2)

Reinstate Monica
Reinstate Monica

Reputation: 4723

Note that the attributes aren't copied, they are shared.

>>> a = Foo()
>>> a.x=[1,2,3]
>>> b = Foo(a)
>>> b.x[2] = 4
>>> a.x
[1, 2, 4]

Upvotes: 5

jcollado
jcollado

Reputation: 40394

This is a way to copy all attributes from one object to another one. However note that:

  • The object passed to the __init__ method may have any type (not the same type as the object being created).
  • Only object attributes are copied (class attributes and methods are not).

Upvotes: 4

Related Questions