Класс Foo
определяется метаклассом Meta
. Метакласс перебирает атрибуты класса и выводит их на экран.
Класс Bar
подклассы Foo
. Однако метакласс не печатает атрибуты, унаследованные от Bar.
Почему у метакласса нет доступа к атрибутам Foo
, унаследованным от Bar
? Что я не понимаю в системе метаклассов Python?
Вот пример кода в 2.7
:
class Meta(type):
def __init__(cls, name, bases, attrs):
print "bases = {}".format(bases)
items = {k:v for k,v in attrs.iteritems() if not k.startswith('__')}
for k,v in items.iteritems():
print k, v
class Foo(object):
__metaclass__ = Meta
hi = 1
# This prints:
# bases = (<type 'object'>,)
# hi 1
class Bar(Foo):
pass
# This prints:
# bases = (<class '__main__.Foo'>,)
Foo.hi
#prints 1
Bar.hi
#prints 1