Добавление динамических свойств к классам
При попытке смоделировать набор результатов базы данных с помощью фиктивных классов возникает проблема: как назначить динамические свойства экземпляра, напоминающие свойства словаря. Это предполагает создание свойств, которые ведут себя как атрибуты с определенными значениями.
Первоначально многообещающий подход заключался в назначении свойств с помощью:
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
Однако это привело к появлению объектов свойств вместо желаемого поведения.
Решение заключается в добавлении свойств в класс сам по себе, а не отдельные экземпляры. Вот как это работает:
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a 1) print(foo.b) # Prints 4
В этом примере мы добавляем свойство b к классу Foo, используя дескриптор свойства. При доступе к foo.b Python вызывает метод __get__ дескриптора и передает экземпляр класса в качестве аргумента. Затем метод __get__ возвращает значение свойства, которое рассчитывается как self.a 1.
Свойства предоставляют удобный способ определения пользовательского поведения для атрибутов, эффективно раскрывая структуру объектно-ориентированной системы Python.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3