«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как добавить динамические свойства к классам, таким как записи словаря?

Как добавить динамические свойства к классам, таким как записи словаря?

Опубликовано 8 ноября 2024 г.
Просматривать:453

How to Add Dynamic Properties to Classes like Dictionary Entries?

Добавление динамических свойств к классам

При попытке смоделировать набор результатов базы данных с помощью фиктивных классов возникает проблема: как назначить динамические свойства экземпляра, напоминающие свойства словаря. Это предполагает создание свойств, которые ведут себя как атрибуты с определенными значениями.

Первоначально многообещающий подход заключался в назначении свойств с помощью:

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