更改 class 的属性不会触发 setter 并且打印它不会触发 getter

Changing attribute of class does not trigger setter and printing it does not trigger getter

我可能遗漏了一些非常简单的东西。

我正在尝试使用 property() 将 getter 和 setter 函数添加到 MyClass 的属性。

class MyClass:
    def __init__(self, attr):
        self._attr = attr

        def attr_setter(self, value):
            print(f'Setting attr')
            self._attr = value

        def attr_getter(self):
            print('Getting attr')
            return self._attr

        self.attr = property(fget=attr_getter, fset=attr_setter)

c = MyClass('something')
print(c.attr)
c.attr = 'something else'
print(c.attr)

但是,打印语句和赋值不会触发 attr_setterattr_getter。我得到以下输出:

property object at <0x0000024A26B489A0>
something else

在评论中找到详细信息

class MyClass:
    def __init__(self, attr):
        #self._attr = attr --> you might want to call the setter
        self.attr_setter(attr)
    
    # correcting the indentation
    def attr_setter(self, value):
        print(f'Setting attr')
        self._attr = value

    def attr_getter(self):
        print('Getting attr')
        return self._attr

    attr = property(fget=attr_getter, fset=attr_setter)

c = MyClass('something')  #Setting attr
print(c.attr) #Getting attr something
c.attr = 'something else' #Setting attr
print(c.attr) #Getting attr something else

# Setting attr
# Getting attr
# something
# Setting attr
# Getting attr
# something else