Python: динамическое добавление свойств в класс - PullRequest
1 голос
/ 18 апреля 2020

Я хочу динамически изменить класс, добавив свойство и атрибут класса. Это должно быть динамично, потому что я создаю механизм исполнения symboli c, чтобы классы определялись пользователем, и я не могу изменить код.

Например, предположим, что класс, определенный пользователем это следующее:

class X:
    def __init__(self, data):
        self.data = data

То, что я точно хочу достичь, это, но динамически:

class X:

    _engine = None

    def __init__(self, data):
        self.data = data

    @property
    def data(self):
        return self._engine.my_get_method(self, "data")

    @data.setter
    def data(self, value):
        return self._engine.my_set_method(self, "data", value)

Поэтому я перехватываю каждый get или устанавливаю атрибут данных.

В движке у меня есть что-то вроде этого, но я не могу найти способ установить свойство:

class Engine:

    def my_get_method(self, attr_name):
        ...

    def my_set_method(self, attr_name, value):
        ...

    def modify_dinamically(self, the_class):
        for attr_name in class_attr_names:
            setattr(the_class, "_engine", self)
            setattr(the_class, attr_name, property(...)) # set the property in some way

Что нужно учесть: Когда я вызываю набор двигателя и получаю, я должен пройти экземпляр и имя атрибута в качестве параметров.

Есть ли способ сделать это?

...