【发布时间】:2015-11-03 09:45:14
【问题描述】:
如何使用元类在 python 中生成属性? 我有一些数据记录,它们之间有一些关系。 我想将每条记录作为一个类型(类)并自动生成这些属性和关系。
我想将此关系指定为数据结构(例如 dict)并自动生成具有属性的类
Record 1
Field description
----------------------------
numOfPin no# of following pin array
pin_array array with numOfpin elements
read_result if opt_flag bit 0 is set, invalid. ignore this value
opt_flag ...
Record 2
....
编辑:澄清.. 缺失/无效字段和可选标志的属性逻辑对于所有记录都是相同的。所以我想在元类中抽象这个。
例如在伪 python 代码中:
record1_spec = { 'numOfpin', ('pin_array','numOfPin'),
'opt_flag', ('read_result','opt_flag') }
record2_spec = { 'numOfsite', ('site_array','numOfsite'),
'opt_flag', ('test_result','opt_flag') }
class MetaClass:
getter_generator( ele, opt ):
if opt : return ele
else return None
get class name (eg. record1) then fetch record_spec to create class
for ele in record_spec:
if ele is tuple type: # relation between field
class.attribute[ele[0]] = getter_generator(ele[0], ele[1])
class record1(metaclass = Metaclass):
...
然后record1 类将具有在record1_spec 中定义的所有属性。
逻辑是,如果设置了某些选项字段,则某些属性会返回适当的值。
【问题讨论】:
-
有点不清楚您要做什么以及是否需要元分类来满足您的需求。例如,您打算如何分配字段值?请注意,元类定义了如何创建类本身,而不是如何定义类的实例。
-
@skyking 我想要元类来创建类(对于每个记录类型。不是记录对象!)每个记录 type 都需要有一些属性,这个属性也可以由元类生成。我有基本的想法。但所有在线 python 元类指南/教程都不是很有帮助。
-
你能提供一个你想如何使用它的例子吗?
-
请edit 提出您的问题并添加说明,说明将由
class record1(metaclass = Metaclass):语句生成的类。我不清楚您希望自动生成哪些属性并将其添加到其中(以及它们正在执行的确切操作)。
标签: python python-3.x metaprogramming metaclass