python3 как скопировать класс, используя подход метакласса - PullRequest
0 голосов
/ 27 мая 2020

Скажем, у меня есть класс с именем MyDocument, который является классом, унаследованным от некоторого ORM (на самом деле это mongoengine.DynamicDocument), и, унаследовав от этого ORM, за ним уже произошли некоторые метаклассы c. .

import mongoengine

class MyDocument(mongoengine.DynamicDocument):
    ....

Теперь я хочу сделать копию класса,

  • подход empty inheritance мне не подходит, потому что mongoengine.DynamicDocument имеет некоторые нежелательное поведение за наследованием.

  • выполнение глубокой копии MyDocument (после создания класса) также не то, что я хочу, потому что уже какой-то мета-класс black magi c произошел, когда класс MyDocument создан, поэтому просто копировать его не имеет смысла (например, имя таблицы, созданной метапрограммированием, не меняется)

Есть ли мета-класс, чтобы скопировать класс , как если бы я просто снова скопировал код и изменил имя класса ? (возможно, это неправильный способ использования mongoengine, тем не менее, мне интересно узнать о самом python3, как использовать мета-класс для этого)

...