【发布时间】:2015-07-06 16:40:59
【问题描述】:
类 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
【问题讨论】:
标签: python python-2.7 inheritance metaclass