On Aug 27, 2009, at 4:49 PM, kj wrote:

Miles Kaufmann <mile...@umich.edu> writes:
Guido's design justifications:
http://mail.python.org/pipermail/python-dev/2000-November/010598.html

Ah!  Clarity!  Thanks!  How did you find this?  Did you know of
this post already?  Or is there some special way to search Guido's
"design justifications"?

I just checked the python-dev archives around the time that PEP 227 was written.

...because the suite
namespace and the class namespace would get out of sync when different
objects were assigned to the class namespace:

class C:
x = 1
def foo(self):
    print x
    print self.x

o = C()
o.foo()
1
1
o.x = 2
o.foo()
1
2

But this unfortunate situation is already possible, because one
can already define

class C:
 x = 1
 def foo(self):
     print C.x
     print self.x

which would lead to exactly the same thing.

You're right, of course. If I had been thinking properly, I would have posted this:

... the suite namespace and the class namespace would get out of sync when different objects were assigned to the class namespace:

   # In a hypothetical Python with nested class suite scoping:
   class C:
       x = 1
       @classmethod
       def foo(cls):
           print x
           print cls.x

   >>> C.foo()
   1
   1
   >>> C.x = 2
   >>> C.foo()
   1
   2

With your example, the result is at least easily explainable: self.x is originally 1 because the object namespace inherits from the class namespace, but running 'o.x = 2' rebinds 'x' in the object namespace (without affecting the class namespace). It's a distinction that sometimes trips up newbies (and me, apparently ;) ), but it's straightforward to comprehend once explained. But the distinction between the class suite namespace and the class namespace is far more subtle; extending the lifetime of the first so that it still exists after the second is created is, IMO, asking for trouble (and trying to unify the two double so).

-Miles

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to