How does the @property decorator work in Python?

后端 未结 13 2458
闹比i
闹比i 2020-11-21 04:49

I would like to understand how the built-in function property works. What confuses me is that property can also be used as a decorator, but it only

13条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-21 05:48

    This following:

    class C(object):
        def __init__(self):
            self._x = None
    
        @property
        def x(self):
            """I'm the 'x' property."""
            return self._x
    
        @x.setter
        def x(self, value):
            self._x = value
    
        @x.deleter
        def x(self):
            del self._x
    

    Is the same as:

    class C(object):
        def __init__(self):
            self._x = None
    
        def _x_get(self):
            return self._x
    
        def _x_set(self, value):
            self._x = value
    
        def _x_del(self):
            del self._x
    
        x = property(_x_get, _x_set, _x_del, 
                        "I'm the 'x' property.")
    

    Is the same as:

    class C(object):
        def __init__(self):
            self._x = None
    
        def _x_get(self):
            return self._x
    
        def _x_set(self, value):
            self._x = value
    
        def _x_del(self):
            del self._x
    
        x = property(_x_get, doc="I'm the 'x' property.")
        x = x.setter(_x_set)
        x = x.deleter(_x_del)
    

    Is the same as:

    class C(object):
        def __init__(self):
            self._x = None
    
        def _x_get(self):
            return self._x
        x = property(_x_get, doc="I'm the 'x' property.")
    
        def _x_set(self, value):
            self._x = value
        x = x.setter(_x_set)
    
        def _x_del(self):
            del self._x
        x = x.deleter(_x_del)
    

    Which is the same as :

    class C(object):
        def __init__(self):
            self._x = None
    
        @property
        def x(self):
            """I'm the 'x' property."""
            return self._x
    
        @x.setter
        def x(self, value):
            self._x = value
    
        @x.deleter
        def x(self):
            del self._x
    

提交回复
热议问题