Метаметоды и методы класса
>
>
>
class M(Printable): ... def mm(cls): ... return "I am a metamethod of %s" % cls.__name__ ... >
>
>
class C(object): ... __metaclass__=M ... def cm(cls): ... return "I am a classmethod of %s" % cls.__name__ ... cm=classmethod(cm) ... >
>
>
c=C()
Частично эта путаница вызвана тем, что C.mm в терминологии Smalltalk назывался бы "методом класса C". Однако методы класса Python - нечто совсем иное.
Метаметод "mm" может быть вызван либо из метакласса, либо из класса, но не из экземпляра. Метод класса может быть вызван и из класса, и из его экземпляров (но не существует в метаклассе).