更改 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_setter
和 attr_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
我可能遗漏了一些非常简单的东西。
我正在尝试使用 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_setter
和 attr_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