A classmethod, whether defined inline or as part of the metaclass can always be called on the type:
class eggs( type ):
def f1( cls ):
print( "eggs" )
class spam( metaclass = eggs ):
@classmethod
def f2( cls ):
print( "spam" )
f = spam()
type(f).f2() #--> spam
type(f).f1() #--> eggs
However, it seems a classmethod defined in a meta-class cannot be called on an instance:
f.f2() #--> spam
f.f1() #--> AttributeError
Why is this?