在设置属性之前检查属性的最佳方法是什么?

时间:2015-04-13 00:19:30

标签: python

我需要在设置之前检查属性。一个天真的实现将是这样的:

class C(object):
    x = 5

    def __setattr__(self, name, value):
        if hasattr(self, name):
            x = getattr(self, name)

            if x == 5:
                print 'do something'
        object.__setattr__(self, name , value)

但是,这会引发课程的发生。 __getattribute__方法,必须在此避免。据我所知,在课堂上搜索' __dict__直接可以做到这一点;但由于这是一个由用户划分的类,我想__slots__和MRO可能会增加复杂性。

考虑到这些因素,在设置属性之前检查属性的最佳方法是什么?


为了完全披露,本课程实际上将被写为C分机;但是,我不能想象这个策略在python实现方面偏离了太多问题。

1 个答案:

答案 0 :(得分:1)

如何使用property装饰器?

class C(object):
    def __init__(self):
        self._x = 5 # Default, for all
        # Future updates should be done with self.x = ...
        # To go through the approval below

    @property
    def x(self):
        return self._x
    @x.setter
    def x(self, value):
        if value == 5:
            print 'do something'
        else:
            self._x = value