Re: Unexpected __metaclass__ method behavior



On Dec 31, 12:06 pm, anne.nospa...@xxxxxxxxxxx wrote:
Well, you see, I have some database functions that deal with "things"
which are either classes or instances thereof. I though polymorphism
would be a nice way to handle them identically, like:

def do(thing): thing.Foo()
do(t)
do(Test)

But never mind, I now understand that Test.__dict__ can contain only
one entry for 'Foo', and that this must be matched.

Kind regards,
Sebastian

Of course you can do this. The trick is *not* to use metaclasses!

class Bar(object):
def foo(self): return 'instance foo'
@classmethod
def classfoo(cls): return 'class foo'

def do(x):
if isinstance(x, type):
return x.classfoo()
else:
return x.foo()

Then:

bar = Bar()
do(bar)
'instance foo'
do(Bar)
'class foo'

HTH

--
Arnaud



.



Relevant Pages