Hi list,
Hopefully a quick metaclass question. In the following example, MyMeta is a
metaclass that does not inherit directly from type:
#!/usr/bin/python
class MyMeta(object):
def __new__(cls, name, bases, vars):
print "MyMeta.__new__ called for %s" % name
return type(name, bases, vars)
class MetaWrapper(object):
__metaclass__ = MyMeta
class M(MetaWrapper):
pass
[EMAIL PROTECTED] ~]$ python t.py
MyMeta.__new__ called for MetaWrapper
[EMAIL PROTECTED] ~]$
When I run that script, it's apparent that although M inherits from
MetaWrapper, it does not use MyMeta as it's metaclass. However, if I change
MyMeta to be a subclass of builtin type, it works as I would expect:
[EMAIL PROTECTED] ~]$ cat t.py
#!/usr/bin/python
class MyMeta(type):
def __new__(cls, name, bases, vars):
print "MyMeta.__new__ called for %s" % name
return super(MyMeta, cls).__new__(cls, name, bases, vars)
class MetaWrapper(object):
__metaclass__ = MyMeta
class M(MetaWrapper):
pass
[EMAIL PROTECTED] ~]$ python t.py
MyMeta.__new__ called for MetaWrapper
MyMeta.__new__ called for M
[EMAIL PROTECTED] ~]$
How exactly does Python choose which MC it will use when building a class?
It doesn't seem to me that the parent class of MyMeta should matter in this
case?
Thanks!
Jeff
--
http://mail.python.org/mailman/listinfo/python-list