Как сгенерировать свойства в 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
. Логика заключается в том, что если какое-либо поле параметра установлено, некоторые свойства возвращают соответствующее значение.
class record1(metaclass = Metaclass):
. Мне неясно, какие именно свойства вы хотите автоматически сгенерировать и добавить к нему (а также какие именно действия они выполняют). - person martineau   schedule 19.07.2018