[Python-Dev] Adding types.build_class for 3.3
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 "<stdin>", line 1, in <module>
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