[Tutor] Alias for a class name
Kent Johnson
kent37 at tds.net
Thu Jul 13 02:05:33 CEST 2006
Gregor Lingl wrote:
> Hi everyoen,
>
> say in some module I have defined a class Pen
> and I want an alias for the class name, say
> Turtle
>
> I can do this:
>
> class Turtle(Pen):
> pass
>
> or simply (after having defined Pen):
>
> Turtle = Pen
>
> Are those two variants different in effect?
> Are there pros or cons for one of both
> variants?
They are different. Turtle = Pen creates an alias - another name that
refers to the same object. Changes made through either name will affect
both. This is similar to what happens if you give two names to a list,
for example.
In [1]: class Pen(object):
...: value = 3
...: def show(self):
...: print type(self), self.value
...:
...:
In [2]: Turtle = Pen
In [3]: p = Pen()
In [4]: p.show()
<class '__main__.Pen'> 3
In [5]: t = Turtle()
In [6]: t.show()
<class '__main__.Pen'> 3
In [7]: Turtle.value = 'new value'
In [8]: p.show()
<class '__main__.Pen'> new value
In [9]: type(p) == type(t)
Out[9]: True
Creating a subclass makes a new class that inherits all the behaviour of
the original class. However you may modify the subclass after it is
created and the modifications won't affect the base class, and objects
of the new class have a different type than objects of the base class:
In [10]: class Turtle(Pen): pass
....:
In [11]: t=Turtle()
In [12]: t.show()
<class '__main__.Turtle'> new value
In [13]: Turtle.value = 'turtle'
In [14]: t.show()
<class '__main__.Turtle'> turtle
In [15]: p.show()
<class '__main__.Pen'> new value
If you want an alias, use an alias. If you need a subclass, make a
subclass. They're not the same!
Kent
More information about the Tutor
mailing list