[Python-Dev] Make class_getitem a class method (original) (raw)

Serhiy Storchaka storchaka at gmail.com
Fri Dec 15 12:45:24 EST 2017


15.12.17 18:47, Yury Selivanov пише:

Shouldn't we optimize the usability for pure-Python first, and then for C API?

Right now we have the 'new' magic method, which isn't a @classmethod. Making 'classgetitem' a @classmethod will confuse regular Python users. For example: class Foo: def new(cls, ...): pass @classmethod def classgetitem(cls, item): pass To me it makes sense that type methods that are supposed to be called on type by the Python interpreter don't need the classmethod decorator. METHSTATIC is a public working API, and in my opinion it's totally fine if we use it. It's not even hard to use it, it's just mildly inconvenient at most.

new is not a class method, it is an "automatic" static method.

class C: ... def new(cls): return object.new(cls) ... C().new is C.new True C.dict['new'] <staticmethod object at 0x7f664ae82c20>

The following two declarations are equivalent:

class A: def new(cls): return cls.name

class B: @staticmethod def new(cls): return cls.name



More information about the Python-Dev mailing list