Как сгенерировать свойства в python с помощью метакласса? У меня есть некоторые записи данных, поля которых имеют некоторые отношения между ними. , и я хотел бы иметь каждую запись как тип (класс) и автоматически генерировать эти свойства и отношения.Свойства автогенератора python
Я хочу указать это соотношение в виде структуры данных (скажут ДИКТ) и автоматическое создание классов со свойствами
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
....
Изменить: разъяснение .. Логикой свойств недостающего/недопустимые поля и дополнительный флаг одинаково для всех записей. Поэтому я хотел бы абстрагировать это в метаклассе.
в псевдо например код питона
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])
класс record1 (метаклассом = метаклассов): .....
затем record1 класс будет иметь все свойства, определенные в спецификации. Логика, если задано какое-либо поле параметра, некоторые свойства возвращают соответствующее значение.
Это немного неясно, что вы пытаетесь сделать, и нужно ли metaclassing в все для ваших нужд. Как вы собираетесь назначать значения полей, например? Обратите внимание, что метакласс определяет, как создается сам класс, а не как определяются экземпляры класса. – skyking
@skyking Я хочу метакласса для создания классов (для каждого типа записи, а не для записи объекта!), И каждый тип записи * должен иметь некоторые свойства, и эти свойства также могут быть сгенерированы метаклассом. У меня есть основная идея. но все онлайн-руководства по метаклассам python/tutorials не очень помогают. – Nyan
Не могли бы вы привести пример того, как вы хотели бы использовать это? – skyking