On Fri, Dec 15, 2017 at 12:45 PM, Serhiy Storchaka <storch...@gmail.com> wrote: > 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 '__class_getitem__' a @classmethod will confuse >> regular Python users. For example: >> >> class Foo: >> def __new__(cls, ...): pass >> >> @classmethod >> def __class_getitem__(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. >> >> METH_STATIC 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.
I never said that __new__ is a class method :) > The following two declarations are equivalent: > > class A: > def __new__(cls): return cls.__name__ > > class B: > @staticmethod > def __new__(cls): return cls.__name__ But nobody decorates __new__ with a @staticmethod. And making __class_getitem__ a @classmethod will only confuse users -- that's all I'm saying. So I'm +1 to keep the things exactly as they are now. It would be great do document that in order to implement __class_getitem__ in C one should add it as METH_STATIC. I also think we should merge your PR that tests that it works the way it's expected. Yury _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com