如何检查用户是否设置了对象的属性?目前,我有一堂课
class foo: def __init__(self): self.bar = 'baz'
后来我想检查用户是否设置了值bar
,即用类似的东西
my_foo = foo() my_foo.bar = 'mybaz'
所以我想知道上面的第二行是否已被调用(如果没有则抛出警告).我有两个解决方案,但我不喜欢它们中的任何一个:
检查是否my_foo.bar
等于默认值.但可能是用户设置my_foo.bar
为相同的值,然后我不想发出警告.
请勿设置默认值__init__
,但仅限于使用时.然后可以检查getattr()
并设置setattr()
.
我确信有一种优雅的pythonic方式可以做到这一点,我没有想到.
使用@property
装饰器来构造getter和setter,并让setter在用户更改属性时告诉您,例如下面的示例
class Foo: def __init__(self): self._x_was_modified = False self._x = None @property def x(self): return self._x @x.setter def x(self, value): self._x_was_modified = True self._x = value foo = Foo() print('x was modified by user: {}'.format(foo._x_was_modified)) foo.x = 42 print('x was modified by user: {}'.format(foo._x_was_modified))
这将输出:
x was modified by user: False x was modified by user: True