[Python-Dev] Classes and Metaclasses in Smalltalk (original) (raw)
Thomas Heller thomas.heller@ion-tof.com
Wed, 2 May 2001 16:49:02 +0200
- Previous message: [Python-Dev] Classes and Metaclasses in Smalltalk
- Next message: [Python-Dev] Classes and Metaclasses in Smalltalk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
thomas wrote:
> > why not spell it out: > > > > self.super.foo(arg1, arg2) > > > > or > > > > self.super.foo(arg1, arg2) > > > > or > > > > super(self).foo(arg1, arg2) > > IMO we still need to specify the class, and there we are: > > super(self, MyClass).foo(arg1, arg2) isn't that the same as self.class ? in which case super is something like: import new class super: def init(self, instance): self.instance = instance def getattr(self, name): for klass in self.instance.class.bases: member = getattr(klass, name, None) if member: if callable(member): return new.instancemethod(member, self.instance, klass) return member raise AttributeError(name) No, it's not the same. Consider:
class X: def test(self): print "test X"
class Y(X): def test(self): print "test Y" super(self).test()
class Z(Y): pass
X().test() print Y().test() print Z().test() print
This prints: test X
test Y test X
test Y test Y (more test Y lines deleted) Runtime error: maximum recursion depth exceeded
This is because super(self).test for the Z() object should start the search in the X class, not in the Y class.
Thomas
- Previous message: [Python-Dev] Classes and Metaclasses in Smalltalk
- Next message: [Python-Dev] Classes and Metaclasses in Smalltalk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]