Inheritance and Attributes

Alex Martelli aleax at aleax.it
Thu Feb 13 13:34:59 CET 2003


Graeme Winter wrote:

> Hello All,
> 
> I will guess that you hear this all the time, but I didn't want to wade
> through 10k messages to find the answer...
> 
> Basically, why does this:
> 
> #!/usr/bin/env python
> 
> class henry:
> 
>      cat = "green"
> 
>      def __init__(self):
>          self.cat = "yellow"
>          print "setting " + str(self) + ".cat = \"yellow\""
> 
> class this(henry):
> 
>      def __init__(self):
>          henry.__init__(self)
> 
> h = this()
> print this.cat
> 
> 
> give this:
> 
> setting <__main__.this instance at 0x8138eec>.cat = "yellow"
> green

Because you're printing the 'cat' attribute from class 'this'
(which is the same one as from class 'henry', by inheritance),
*NOT* the same-name attribute from instance 'h'.

Try:

print h.this

and you'll see

yellow

of course.


> I would expect that since I have called the constructor for my base
> class, the attribute should exist.... Further, if I remove the cat =
> "green" line from the class definition I get:
> 
> setting <__main__.this instance at 0x816465c>.cat = "yellow"
> Traceback (most recent call last):
>    File "inherit.py", line 15, in ?
>      print this.cat
> AttributeError: class this has no attribute 'cat'
> 
> Which I find rather surprising.

You find surprising that the class object has no such
attribute if you've never given it one?  You have given
the INSTANCE an attribute thus named, but what you are
trying to print is the attribute from the CLASS.


Alex





More information about the Python-list mailing list