Как использовать дескриптор (или что-то подобное) в Python для нестатических полей без потери инкапсуляции? - PullRequest
0 голосов
/ 10 декабря 2018

На самом деле мой вопрос уже обсуждался здесь ранее: Как я могу использовать дескрипторы для нестатических методов?

И было несколько хороших способов сделать это, назвав 3 из них специально:

  1. Используйте свойства и определяйте геттер и сеттер отдельно ( Принято решение, но теряется инкапсуляция )
  2. Используйте ClassFactory для создания отдельных классов просто для созданияразделение статических полей ( Хороший обходной путь, но не реальное решение )
  3. Игнорируйте функции дескриптора и свойств и просто используйте функцию set и get в обычном режиме.( Окончательно выбранное решение лицом, которое инициировало вопрос, просто потому, что оно, я думаю, самое простое! )

Все вышеперечисленные решения работают хорошо, но мне неони завершены.Вы можете увидеть мои комментарии для каждого предложенного решения в скобках.

Теперь я хотел бы задать тот же вопрос еще раз, но на этот раз, рассматривая этот конкретный вариант использования:

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

Этоэто пример, который я хотел бы использовать разработчикам:

class TestStruct(BaseStruct):
    # define structure
    field1 = SomeField()
    field2 = OtherField()
    field3 = NextField()

BaseStruct и SomeField / OtherField / ThirdField являются частью вспомогательных классов, и другие разработчики их не видят, а просто используют их.

Затем они могут сосредоточиться на определении структуры, а не на определении свойств и т. Д., И они просто будут использовать такие поля, как:

my_struct = TestStruct()
my_struct.field1 = SOME_VALUE
...

Но проблема в том, что поля определены как статические члены, которыемы знаем все нижние части статических полей в этом случае.

Так что вопрос в том, как я могу иметьони нестатичны и сохраняют структуру в TestStruct простой, перенося всю сложность определения свойств (или чего-либо еще) в BaseStruct.

Обратите внимание, что поля определяются другими разработчиками, и мы не делаемзнать о них.

Любые предложения в Python 2 или 3 приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...