name lookup failure using metaclasses with unittests

Arnaud Delobelle arnodel at gmail.com
Thu Apr 11 04:19:59 EDT 2013


On 11 April 2013 07:43, Ulrich Eckhardt <ulrich.eckhardt at dominolaser.com> wrote:

> The second question that came up was if there is a way to keep a metaclass
> defined inside the class or if the only way is to provide it externally.

Yes, using metaclasses!  I wouldn't recommend it though.  Here's a
proof of concept:

class MyType(type):
    def __new__(meta, name, bases, attrs):
        try:
            metaclass = attrs.pop('__metaclass__')
        except KeyError:
            return type.__new__(meta, name, bases, attrs)
        else:
            return metaclass(name, bases, attrs)

class MyObject(metaclass=MyType):
    pass


>>> class Test(MyObject):
...     def __metaclass__(name, bases, attrs):
...         print("Test metaclass")
...         return MyType(name, bases, attrs)
...
Test metaclass

-- 
Arnaud



More information about the Python-list mailing list