On Sun, 14 Feb 2010 12:08:40 pm the kids wrote: > Hi, my name is John Paul. > > I was trying to define a class but I can't make it asign particular > objects particular variables at their creation. Please help. > > John Paul
I don't quite follow what you mean, it is best if you can show example code and describe what you expect and what you get instead. But first a brief note on terminology. In some other languages, people talk about "class variables" being variables that are part of the class. To me, that's inconsistent with everything else: an int variable holds an int; a string variable holds a string; a list variable holds a list; so a class variable should hold a class. (You might argue, why would you ever need a variable that was a class? As an experience Python programmer, I can tell you such a thing is very, very useful, and far more common than you might think.) Anyway, in Python circles, it is much more common to describe class variables as attributes. Other languages use the term "members", and people who used Apple's Hypercard will remember the term "properties" (but properties in Python are slightly different). Python has two sorts of attributes (class variables, a.k.a. members): * Attributes which are attached to the class itself, and therefore shared by all the instances. These are known as "class attributes". * Much more common is the ordinary sort of attribute that is attached to instances; these are usually known as "instance attributes", or more often, just plain old attributes. You create a class attribute (shared by all instances) by assigning to a name inside the class definition: class K: shared = [] This is now shared between all instances. You create an instance attribute (not shared) by assigning it inside a method, using the usual attribute syntax. The usual place to do this is inside the __init__ method. (Note that __init__ has TWO underscores at both the beginning and end.) class K: shared = [] def __init__(self): self.attribute = [] And in use: >>> a = K() >>> b = K() >>> a.shared.append(23) >>> b.shared [23] >>> a.attribute.append(23) >>> a.attribute [23] >>> b.attribute [] Using class attributes is sometimes tricky, because Python makes it really easy to accidentally hide a class attribute with an instance attribute with the same name, but fortunately having shared data like this is quite rare, so it's unusual to be a problem. Hope this helps, -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor