En Tue, 24 Jul 2007 21:55:17 -0300, Alex Popescu <[EMAIL PROTECTED]> escribió:
> Neil Cerutti <[EMAIL PROTECTED]> wrote in news:eRwpi.36813$G23.28496 > @newsreading01.news.tds.net: >> On 2007-07-25, Alex Popescu <[EMAIL PROTECTED]> wrote: >>> As a matter of style, how do you figure out that class_list is >>> a class attribute and not an instance attribute? (I don't >>> remember seeing anything in the PEP describing the coding >>> style). >> >> Check out dir(MyClass) and dir(MyClass()) for some insight, if it >> turns out that it matters. > > I must confess that I am a bit confused by this advise, as both are > returning exactly the same thing. Perhaps he meant to say vars(MyClass) and vars(MyClass()) >> Preferably, the user of a class >> doesn't have to really think about it much. > I know that this would be prefered, but in case you are getting 3rd party > code and you modify a class attribute without knowing it is a class > attribute then you may get into trouble (indeed the real problem is with > the designer of the 3rd party code, but still I think it is a valid > concern). Well, you should read its documentation before modifying 3rd. party code... :) If you access (read) an attribute through an instance (let's say, you write x = self.name inside a method) the attribute is first searched in the instance, and when not found, in the class (The actual rules are more complicated but this will suffice for now). If you assign an attribute, it is always set on the instance (never on the class). So you can use a class attribute as a default value for an instance attribute. For this use case, you don't care whether it's an instance attribute or class attribute: py> class Title: ... color = "white" ... def __init__(self, text, color=None): ... self.text = text ... if color is not None: ... self.color = color ... py> t1 = Title("Hello") py> vars(t1) {'text': 'Hello'} py> t1.color 'white' py> Title.color 'white' py> t1.color = "red" py> vars(t1) {'color': 'red', 'text': 'Hello'} py> Title.color 'white' py> t2 = Title("Goodbye", "blue") py> vars(t2) {'color': 'blue', 'text': 'Goodbye'} -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list