__setattr__ vs свойства класса для установки атрибутов - PullRequest
0 голосов
/ 30 августа 2018

Рассмотрим два следующих определения класса, в которых для выполнения дополнительных проверок перед присвоением значения атрибуту (например, отслеживание измененных переменных, проверка на допустимость и т. Д.) В первом я переопределяю * 1001. * метод, а во втором я использую свойства.

class A(object):
    def __init__(self, x):
        self.x = x

    def __setattr__(self, name, value):
        # do something
        self.__dict__[name] = value

class B(object):
    def __init__(self, x):
        self.x = x

    @property
    def x(self):
        return self.x

    @x.setter
    def x(self, v):
        # do something
        self.x = v

Мне кажется, они ведут себя одинаково.
Есть ли разница между этими двумя? Какой из них предпочтительнее и почему?

1 Ответ

0 голосов
/ 30 августа 2018

__setattr__ является более общим, поскольку он будет работать для A().foo = 3, независимо от того, какой атрибут foo вы предоставите. Установщики свойств относятся к одному, явно определенному свойству и не могут использоваться для «случайного» создания атрибута.

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