[Python-ideas] class-only methods without using metaclasses

Nick Coghlan ncoghlan at gmail.com
Fri Mar 8 00:24:35 CET 2013

On Fri, Mar 8, 2013 at 9:02 AM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> Nick Coghlan wrote:
>> It's too much additional complexity to resolve a largely theoretical
>> problem.
> In Python 2 you could get class-only methods like this:
>    class Foo(object):
>       class __metaclass__(type):
>          def classmeth(cls):
>             ...
> I'm mildly disappointed that this can't be done any more
> in Python 3. Sometimes you need genuine metaclass methods,
> e.g. __xxx__ methods for a class rather than an instance.

You can still do that, you just have to define the metaclass in advance:

class FooMeta(type):
    def classmeth(cls):

class Foo(metaclass=FooMeta):

This is the price we pay for allowing metaclasses to customise the
namespace used to execute the class body in __prepare__.


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-ideas mailing list