Как динамически добавить свойство в класс?Python

Программы на Python
Anonymous
Как динамически добавить свойство в класс?

Сообщение Anonymous »

Цель состоит в том, чтобы создать макетный класс, который ведет себя как набор результатов базы данных.

Так, например, если запрос к базе данных возвращает результат с использованием выражения dict, {' ab':100, 'cd':200, то я хотел бы увидеть:

Код: Выделить всё

>>> dummy.ab
100
Сначала я подумал, что можно сделать это так:

Код: Выделить всё

ks = ['ab', 'cd']
vs = [12, 34]
class C(dict):
def __init__(self, ks, vs):
for i, k in enumerate(ks):
self[k] = vs[i]
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))

def fn_readonly(self, v)
raise "It is ready only"

if __name__ == "__main__":
c = C(ks, vs)
print c.ab
но c.ab вместо этого возвращает объект свойства.

Замена setattr строка с k = property(lambda x: vs) вообще бесполезна.

Так как же правильно создать свойство экземпляра во время выполнения?

P.S. Мне известна альтернатива, представленная в разделе Как используется метод __getattribute__?

Подробнее здесь: https://stackoverflow.com/questions/132 ... ynamically

Вернуться в «Python»