С какой целью имеет смысл возвращать возвращаемое значение методу установки свойства? - PullRequest
1 голос
/ 07 мая 2020

В каком контексте имеет смысл предоставить методу установки свойства класса возвращаемое значение, как показано в следующем фрагменте кода?

class Person():
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

    @property # getter method
    def full_name(self):
        return ' '.join([self.first_name, self.last_name])

    @full_name.setter # setter method
    def full_name(self, name):
        self.first_name, self.last_name = name.split()
        return 'When and how should I use this return value?'

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Хотя метод установки может возвращать значение, он предназначен для вызова в контексте, где это возвращаемое значение будет проигнорировано. В чем-то вроде

p = Person()
p.full_name = "John Doe"

присвоение будет выполнено Person.full_name.__set__(p, "John Doe"). Если вы посмотрите в инструкции к дескриптору, вы увидите раздел , который демонстрирует, как класс property может быть определен в чистом Python. Наиболее важным для этого вопроса является то, как __set__ будет реализован:

def __set__(self, obj, value):
    if self.fset is None:
        raise AttributeError("can't set attribute")
    self.fset(obj, value)

self.fset - ваш установщик. Обратите внимание, что его возвращаемое значение игнорируется.

1 голос
/ 08 мая 2020

Если вы хотите получить значение, используйте метод get. Если вы хотите установить значение, используйте правила языка программирования для методов set.

Если вы это сделаете, вы нарушите правила инкапсуляции POO и принцип единственной ответственности.

Если вы хотите узнать больше, вы можете получить доступ к этой статье в Википедии о принципе единой ответственности . Ответственность за одиночные игры является частью шаблона проектирования SOLID, а для POO - одним из наиболее часто используемых шаблонов. Вот ссылка .

...