Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Насколько я знаю, в Python-е как раз вариант с одним метаклассом на всех, разве нет?
class Foo(object):
__metaclass__ = MyMetaClass
class Foo(object, metaclass=MyMetaClass):
...
class FooMeta(type):
pass
class Foo(object, metaclass=FooMeta):
pass
class Bar(object):
pass
type(Bar) == <class 'type'>
Bar.__mro__ == (<class '__main__.Bar'>, <class 'object'>)
type(Foo) == <class 'FooMeta'>
Foo.__mro__ == (<class '__main__.Foo'>, <class 'object'>)
type(FooMeta) == <class 'type'>
FooMeta.__mro__ == (<class '__main__.FooMeta'>, <class 'type'>, <class 'object'>)
type(type) == <class 'type'>
type.__mro__ == (<class 'type'>, <class 'object'>)
type(object) == <class 'type'>
object.__mro__ = (<class 'object'>,)
->Object class
MetaObject
->Object class class
Class
->Object class class class
MetaClass
->Object class class class class
Class "дальше зацикливается"
Point allMethods size." 440 <- Methods count in Point instances"
Point class allMethods size." 815 <- Methods count in Point class"
Point class class "This is Metaclass"
allMethods size." 738 <- Methods count in all metaclasses"
Point class class class "This is Metaclass class"
allMethods size." 814 <- Methods count in Metaclass "
Point class class class class "This is Metaclass again"
allMethods size." 738 <- Methods count in all metaclasses"
Метаклассы в Smalltalk