On Thu, Aug 16, 2018 at 6:00 AM, thomas.lynch--- via Python-list <python-list@python.org> wrote: > Appreciate some help in how in Python a person can add some external methods > to existing classes in the presence of simple one level inheritance. Here is > an example stripped down to the shiny brass tacks: > > class A: > def __init__(self): > self.number = 1 > > def A_biginc(self): > self.number += 100 > > A.biginc = A_biginc > #setattr(A, 'biginc', A_biginc) > > class B(A): > def __init__(self): > super().__init__() > print("making a B") > > def B_biginc(self): > super().biginc() # super() trips up > super().biginc() > return self.number > > B.biginc = B_biginc > #setattr(B, 'biginc', B_biginc) >
The no-arg form of super() is a bit magical, and depends on being compiled inside a class definition. You can use the regular form of the function instead: super(B, self) On Thu, Aug 16, 2018 at 6:17 AM, Calvin Spealman <cspea...@redhat.com> wrote: > You really can't, and shouldn't. The super() helper relies on information > that exists inside the class definition and which is not available simply > at runtime by virtue of being attached to the class. > > Besides, modifying classes externally is generally considered a bad idea. > Maybe you could accomplish this with a subclass adding this method, instead. When used correctly, it's perfectly acceptable. It's a feature for a reason. ChrisA -- https://mail.python.org/mailman/listinfo/python-list