当前位置:  开发笔记 > 编程语言 > 正文

如何检查属性是否具有__init__中定义的默认值

如何解决《如何检查属性是否具有__init__中定义的默认值》经验,为你挑选了1个好方法。

如何检查用户是否设置了对象的属性?目前,我有一堂课

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方式可以做到这一点,我没有想到.



1> brunsgaard..:

使用@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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有