Classmethods are evil

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Sat May 17 00:57:24 EDT 2008


On Sat, 17 May 2008 04:01:50 +0000, Ivan Illarionov wrote:

> 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.

*The* use case IMHO are alternative constructors.  They belong to the
class, so functions are not as clear and it's possible to have more than
one class in a module with class methods of the same name, e.g.
`A.from_string()` and `B.from_string()` vs. `create_a_from_string()` and
`create_b_from_string()`.

And I don't see how functions can be inherited by sub classes like class
methods can.

Metaclasses are more clear than class methods?  You must be joking!?

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

Writing meta classes just for alternative constructors seems to be more of
a mess to me.  Too much magic for such a simple case for my taste.

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list