拦截Python类中的属性修改

时间:2016-05-26 12:32:15

标签: python attributes

我想在Python中实现一个类,其中修改其属性的子集会导致调用特定的类方法。我看到Python提供了很多方法来实现我想要的东西,但我不确定哪种方法是实现这一目标的最恐怖和最简单的方式。

例如,假设我们的课程Foo包含属性xyz,我们有兴趣拦截对属性{{1}的修改}和x。每当有人拨打yfoo.x = ...时,我都希望调用方法foo.y = ...。另外,我真的不在乎是否必须为每个属性使用包装器,只要这个包装器只需要写一次,例如,以某种方式拦截对几乎不存在的方法foo.barfoo.set_x(...)foo.set_y(...)的调用。

1 个答案:

答案 0 :(得分:0)

使用Python中的新类实际上非常容易,它基于object类构建:

class Foo ( object ) :

    def __setattr__ ( self, name, value ) :
        self.bar( name, value )
        object.__setattr__( self, name, value )

    def bar ( self, name, value ) :
        print( 'Setting {} to {}.'.format( name, value ) )