11.02.2013 23:29, Nick Coghlan wrote:

3. I'm trying to avoid any custom magic specific to this method, but
making it implicitly a static or class method is fairly easy if we so
choose - the standard retrieval code during class creation can just
bypass the descriptor machinery, and wrap it in staticmethod or
classmethod if it isn't already. Given that __new__ is already
implicitly static, it may be easier to follow that precedent here
rather than trying to explain why an explicit @classmethod is needed
in one case but not the other.

Though __new__ is implicitly a *static* rather than a *class* method
(so we can use it e.g. by calling object.__new__(MyClass), though --
besides -- in Py3k unbound methods have gone so the difference between
static and non-static-and-non-class-methods is smaller than in Py2.x),
in case of __init_class__ + super() it'd have to be called:

    super().__init_class__(__class__)

...and it seems to me a bit awkward.

And making it implicitly a *class* rather than a *static* method whould
make *impossible* to do calls such as:

    ExplicitAncestor.__init_class__(ExplicitDescendant)

...though I'm not sure we'd ever need such a call. If not -- implicit
*class* method may be a good idea, but if we would?

***

On the margin: is that middle underscore in '__init_class__' necessary?

We had __metaclass__, not __meta_class__... OK, it's one world, but still we also have __getattr__, __getattribute__, __getitem__, __instancecheck__, __qualname__, __truediv__ etc. (not __get_attr__, __instance_check__ etc.).
[I remember only one exception: __reduce_ex__, rather rarely used, and
easy to defend against weird __reduceex__].

Wouldn't __initclass__ be readable enough? IMHO it could spare users
trouble with remembering special case.

Cheers.
*j

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to