Johnny Lee wrote: > Hi, > Look at the follow command in python command line, See what's > interesting?:) > > >>>>class A: > > i = 0 > >>>>a = A() >>>>b = A() >>>>a.i = 1 >>>>print a.i, b.i > > 1 0
Quite what I would expect. First you declare i as being a *class* attribute of A, with value 0. Then you create 2 instances a and b of A. Then you add to a an *instance* variable named i (that then shadows the class variable of the same name), with value 1. Then you print a.i, wihci is the instance variable i of a, and b.i, which is the class variable i of A, with value 0. > --------------------------------------- > > >>>>class A: > > arr = [] > >>>>a = A() >>>>b = A() >>>>a > > <__main__.A instance at 0x00C96698> > >>>>b > > <__main__.A instance at 0x00CA0760> > >>>>A > > <class __main__.A at 0x00B314B0> > >>>>a.arr.append("haha") >>>>print a.arr , b.arr > > ['haha'] ['haha'] Now you create a class A with a *class* variable arr which is an empty list, and 2 instances a and b of A. Then you append to a.arr - which is A.arr, so when you print a.arr and b.arr, you in fact print A.arr >>>>a.arr = ["xixi"] Then you add an instance variable arr to a, shadowing A.arr >>>>print a.arr , b.arr > > ['xixi'] ['haha'] So now you print a.arr and A.arr (accessed thru b) (snip) > >>>>class X: > > def __init__(self): > self.arr = [] > >>>>m = X() >>>>n = X() >>>>m.arr.append("haha") >>>>print m.arr, n.arr > > ['haha'] [] > Here you define a class X with an *instance* variable arr, and two instances m and n of X, then append to m.arr, which of course has no impact on n. I dont see anything interesting nor problematic here. If you understand the difference between class attributes and instance attributes, the difference between mutating an object and rebinding a name, and the attribute lookup rules in Python, you'll find that all this is the normal and expected behavior. Or did I miss something ? -- bruno desthuilliers - is Python much more readable than Perl ??? python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in '[EMAIL PROTECTED]'.split('@')])" -- http://mail.python.org/mailman/listinfo/python-list