Ivan Illarionov a écrit :
After re-reading "Python is not Java" I finally came to conclusion that classmethods in Python are a very Bad Thing.
>
I can't see any use-case of them that couldn't be re-written more clearly with methods of metaclass or plain functions.

Plain functions don't give you polymorphic dispatch and can't be overriden. Using metaclass methods requires a custom metaclass, which 1/ adds boilerplate code and cognitive load and 2/may bring problems, specially wrt/ MI.

They have the following issues:
1. You mix instance-level and class-level functionality in one place making your code a mess.

May I remind you that every name defined at the top-level of a class statement becomes a class attribute ?

Anyway : most of the use case I've had so far for classmethods required collaboration between the instance and the class, and I definitively prefer to have related functionalities defined in one place.

2. They are slower than metaclass methods or plain functions.

Slower than plain functions, indeed - but so are instancemethods. Slower that metaclass methods ? I never benchmarked this, but I don't see any reason that should be the case. Anyway, you could also argue that properties are slower than plain attributes, which are slower than local vars etc...

I really want to hear your opinions on the subject.


Mine is that classmethods are a GoodThing that make simple thing easy.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to