Rogério Brito wrote:
class C:
f = 1
def g(self):
return f
I get an annoying message when I try to call the g method in an object of type
C, telling me that there's no global symbol called f. If I make g return self.f
instead, things work as expected, but the code loses some readability.
Is there any way around this or is that simply "a matter of life"?
class C:
f =1
creates the 'C.f ' name. When 'f' is used in g, you'll get then an error.
class C:
f = 1
def g(self):
return C.f
is the obvious solution. However it can be slightly improved. f is a
class attribute, meaning it's common to all instances of the C class.
Thus g would be a class method, and is here declared liek a instance
method (the instance being self).
class C:
f = 1
@classmethod
def g(cls):
return cls.f
c1 = C()
c2 = C()
print c1.f, c2.f # f is not an attribute of c1 nor c2, thus the lookup
will try in the class and find C.f
1 1
c1.f = 10 # this create the c1 instance attribute f != class attribute f
c2.f = 20 # this create the c2 instance attribute f != class attribute f
print c1.f, c2.f, c1.g(), c2.g(), C.f
10 20 1 1 1
Cheers,
JM
--
http://mail.python.org/mailman/listinfo/python-list