Overriding variables used by base classes
Duncan Booth
duncan at NOSPAMrcp.co.uk
Fri Nov 14 08:42:42 EST 2003
google_mail at aristoweb.net (Corey Lubin) wrote in
news:a64176a.0311140417.2ad0b51a at posting.google.com:
> [original.py]
> someGlobal=1
>
> class Original:
> def foo(self):
> # Make use of someGlobal
> [/original.py]
>
> [tainted.py]
> from original import *
> someGlobal=2
>
> class Tainted(Original):
> pass
> [/tainted.py]
>
> How might one make it such that Tainted.foo makes use of
> tainted.someGlobal, rather than original.someGlobal? Must I use
> eval/exec? Note that the point is that I don't want to have to
> duplicate the definition of foo.
Make foo a classmethod, lose the globals altogether and make them class
variables:
class Original:
someVar = 42
def foo(cls):
print cls.someVar
foo=classmethod(foo)
class Tainted(Original):
someVar = 24
Original().foo() # prints 42
Tainted().foo() # prints 24
Oh, and lose the 'from original import *', just do 'import original' and
refer to original.Original in your class definition.
--
Duncan Booth duncan at rcp.co.uk
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?
More information about the Python-list
mailing list