Why to use __setattr__ in python?

后端 未结 7 1237
隐瞒了意图╮
隐瞒了意图╮ 2020-12-16 11:12

I don\'t know for why using __setattr__ instead simple referencing like x.a=1.

I understand this example:

class Rectangle:         


        
7条回答
  •  余生分开走
    2020-12-16 11:34

    The first use of __setattr__ is to be overwritten in a class definition.

    class Foo ( object ) :
    
        def __init__ ( self ) :
            self.x = 'looser'
    
        def __setattr__ ( self, name, value ) :
            if name == 'x' :
                print( 'Hello, {} !'.format( value ) )
                self.x = value
    

    Problem, Foo() will print an infinite sequence of :

    'Hello, looser !'
    

    There comes the second use which is that, when you're doing that, you can call setattr from the parent class (object by default) to avoid infite recursion :

    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 ) )
    

    And therefore :

    f = Foo()
    
    >> 'Hello, winner !'
    
    f.x
    
    >> 'winner'
    

提交回复
热议问题