[Python-Dev] Adding types.build_class for 3.3 (original) (raw)

Mark Shannon mark at hotpy.org
Wed May 9 09:57:55 CEST 2012


Nick Coghlan wrote:

On Wed, May 9, 2012 at 4:37 PM, Daniel Urban <urban.dani+py at gmail.com> wrote:

On Wed, May 9, 2012 at 3:10 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:

We need the explicitly declared metaclass as well as the bases in order to determine the correct metaclass. Note, that the current patch (at http://bugs.python.org/issue14588) obtains the explicitly declared metaclass from the keywords dict (exactly like the class statement). Ah, good point. In that case, consider me convinced: static method it is. It can join mro() as the second non-underscore method defined on type().

Be careful adding methods to type. Because type is its own metaclass descriptors can appear to add strangely:

int.mro()

[<class 'int'>, <class 'object'>]

type.mro()

Traceback (most recent call last): File "", line 1, in TypeError: descriptor 'mro' of 'type' object needs an argument

As a consequence of this, making build_class either a class method or a static method will cause a direct call to type.build_class() to fail as neither class method nor static method are callable.

Cheers, Mark.



More information about the Python-Dev mailing list