Python 属性在构造函数中设置值时不使用 setter

Joh*_*eer 0 python constructor properties

我有一个带有构造函数和几个属性的类

class Foo(object):
    def __init__(self, value1):
        self._value1 = value1

    @property
    def value1(self):
        return self._value1

    @property.setter
    def value1(self, value):
         assert value == 1
         self._value1 = value
Run Code Online (Sandbox Code Playgroud)

现在,当我在创建对象时设置 value1 时,不使用 setter。我注意到这一点是因为在输入错误的值时没有调用断言。

如何使构造函数中设置的值使用 setter?

Dan*_*man 7

您通过设置底层变量而不是使用属性来显式绕过 setter。去掉下划线。

def __init__(self, value1):
    self.value1 = value1
Run Code Online (Sandbox Code Playgroud)