[Tutor] question about classes and atributes

euoar euoar at yahoo.es
Fri Nov 3 16:11:16 CET 2006


Andreas Kostyrka escribió:
> Because your atribute is a class attribute:
>
> class C:
>     ca = 123
>
> print C.ca         # 123
> c1 = C()
> print c1.ca        # 123
> c1.ca = 140 
> print c1.ca        # 140
> print C.ca         # 123
> c2 = C()
> print c2.ca        # 123
> C.ca = 141
> print C.ca         # 141
> print c1.ca        # 140
> print c2.ca        # 141
>
> Basically, when an instance does not have an attribute, it looks them up
> in the class, which might recurse into base classes.
>
> Furthermore, objects & classes 101 material:
>
> class C:
>     def method(self):
>         print self
>
> c = C()
> print c.method      # bound method to c
> print C.method      # unbound method, checks that first argument is a C
> print C.__dict__["method"]
>                     # function, does NOT check first argument.
>
> So basically, the whole self argument handling is magic that happpens
> during attribute lookup.
>
> Andreas
>
> Am Freitag, den 03.11.2006, 14:27 +0100 schrieb euoar:
>   
>> I think I don't understand the OOP in python, could anyone explain why 
>> this code works?
>>
>> class example:
>>     atribute = "hello world"
>>    
>> print example.atribute
>>
>> Why you don't have to make an object of the class to access to the 
>> atribute?
>>
>> ( class example:
>>        atribute = "hello world"
>>   
>>   obj = example()
>>   print obj.atribute
>>
>>
>> Thanks in advance.
>>
>> 		
>> ______________________________________________ 
>> LLama Gratis a cualquier PC del Mundo. 
>> Llamadas a fijos y móviles desde 1 céntimo por minuto. 
>> http://es.voice.yahoo.com
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>     
Thank you for your answer and the examples. So without self it is an 
instance variable (like "static" in java/c#). But then, I don't 
understand how is it possible this in your example:

c1.ca = 140 

or down:

print C.method

Are you creating new atributes and methods at run time? Is that what has happened? In fact I have tried also this:

class example:
	atribute = "green"

obj = example()
obj.a_new_atribute = "white"

And even this seems to be correct:

class example:
	atribute = "green"

example._other_atribute = "yellow"


So, in python, you can add methods at run time to an object, and even you can add them to a class at run time?


		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com


More information about the Tutor mailing list