class object's attribute is also the instance's attribute?

Marco Nawijn nawijn at gmail.com
Thu Aug 30 16:48:24 CEST 2012


On Thursday, August 30, 2012 4:30:59 PM UTC+2, Dave Angel wrote:
> On 08/30/2012 10:11 AM, Marco Nawijn wrote:
> 
> > On Thursday, August 30, 2012 3:25:52 PM UTC+2, Hans Mulder wrote:
> 
> >> <snip>
> 
> >>
> 
> > Learned my lesson today. Don't assume you know something. Test it first ;). I have done quite some programming in Python, but did not know that class attributes are still local to the instances. 
> 
> 
> 
> They're not.  They're just visible to the instances, except where the
> 
> instance has an instance attribute of the same name.  Don't be confused
> 
> by dir(), which shows both instance and class attributes.
> 
> 
> 
> Please show me an example where you think you observe each instance
> 
> getting a copy of the class attribute.  There's probably some other
> 
> explanation.

I don't have an example. It was just what I thought would happen. Consider the following. In a class declaration like this:

class A(object):
    attr_1 = 10

    def __init__(self):
       self.attr_2 = 20

If I instantiated it twice:

obj_1 = A()
obj_2 = A()

For both obj_1 and obj_2 attr_1 equals 10. What I thought would happen after the following statement:

obj_1.attr_1 = 12

is that obj_2.attr_1 also equals 12. This is what surprised me a little, that's all. 

Marco



More information about the Python-list mailing list