Is there a reason not to do this?
Michele Simionato
michele.simionato at gmail.com
Sat Dec 2 09:47:47 EST 2006
Ron Garret wrote:
>
> Doesn't work for me:
>
> >>> c2
> <__main__.C2 instance at 0x51e850>
> >>> c2.m1()
> G
> >>> class C2:
> ... __metaclass__ = modify_in_place
> ... def m1(self): print 'Q'
> ...
> >>> c2.m1()
> G
> >>> C2().m1()
> Q
I assume your original C2 class was defined in a different module, not
in the current global
namespace. What do you get from c.__class__.__module__ ? It should be
__name__ for
this approach to work.
class C2:
def m1(self):
return 'G'
c = C2()
def modify_in_place(name,bases,clsdict):
cls = globals()[name]
for attr,val in clsdict.iteritems():
setattr(cls,attr,val)
return cls
# Replace second C2 class above with this
class C2:
__metaclass__ = modify_in_place
def m1(self):
return 'Q'
assert c.m1() == 'Q'
assert c.__class__.__module__ == __name__ # make sure c.__class__ is
defined in the current module
Michele Simionato
More information about the Python-list
mailing list