类// direct "click" listener on an ID element
$('#prev').on('click', function(event) {})
使用元类Foo
定义。元类循环遍历类属性并将它们打印到屏幕。
类Meta
子类Bar
。但是,元类不会从Bar中打印继承的属性。
为什么元类不能访问Foo
中继承的Foo
属性?我对python的元类系统有什么不了解?
以下是Bar
中的示例代码:
2.7
答案 0 :(得分:1)
attrs
__init__
参数只包含该类的属性,而不是其基础。
Bar
对象没有属性hi
。相反,当您要求Bar.hi
时,查询将从Bar
开始,找出它没有hi
,然后查看基地Foo
以找到它。< / p>
答案 1 :(得分:0)
正如@orlp所说,attrs
仅包含正在创建的类的类字典。但是,您仍然可以访问hi
,因为它位于__dict__
其中一个基数的Foo
属性中。也就是说,你可以做类似于你所拥有的东西,但是通过基类递归并打印出每个基类字典中的条目。
另一种方法是使用dir()
,它应该粗略地返回一个类具有的所有属性的列表。我说粗略因为类可以实现__getattr__
或__getattribute__
来“动态”返回属性,这意味着类可能没有明确定义的属性集dir()
要返回 - 请参阅完整的免责声明here。但在许多常见情况下,以下内容将起作用:
class Meta(type):
def __init__(cls, name, bases, attrs):
print "bases = {}".format(bases)
for attr in dir(cls):
if not attr.startswith('_'):
print attr, getattr(cls, attr)
class Foo(object):
__metaclass__ = Meta
hi = 1
class Bar(Foo):
pass
打印哪些:
bases = (<type 'object'>,)
hi 1
bases = (<class '__main__.Foo'>,)
hi 1