代码之家  ›  专栏  ›  技术社区  ›  rawwar

在python中使用属性的getter

  •  1
  • rawwar  · 技术社区  · 7 年前

    我正在研究属性,无法理解getter的用法。

    代码:

    class A:
        def __init__(self,p):
            self._p = p
        @property
        def p(self):
            return self._p
        @p.setter
        def p(self, value):
            self._p = value
        @p.getter
        def p(self):
            return self._p
    

    所以,我做了以下工作

    obj = A(10)
    print(obj.p)
    

    我得到了以下输出:

    所以,我想,调用了@p.getter,返回了_q的值。

    但是,我尝试不使用@p.getter,如下所示

    class A:
        def __init__(self,p):
            self._p = p
        @property
        def p(self):
            return self._p
        @p.setter
        def p(self, value):
            self._p = value
    

    并做了以下工作

    目标=A(10)
    打印(对象P)
    

    即使这样,我也得到了以下输出:

    3 回复  |  直到 7 年前
        1
  •  3
  •   Martijn Pieters    7 年前

    这个 @property 函数上的decorator创建新的 property 对象并将修饰函数设置为getter。所以在 同一个班 , the @p.getter

    class Foo(object):
        @property
        def p(self):
            return self._p
    
        @p.setter
        def p(self, value):
            self._p = value
    
    class Bar(Foo):
        @Foo.p.getter
        def p(self):
            return self._p + 10
    

    class NotASubclass(object):
        @Foo.p.getter
        def p(self):
            return self._p * 10
    

    Bar() NotASubclass p Foo()

    fset @Foo.p.getter

    How does the @property decorator work? Python overriding getter without setter

        2
  •  4
  •   Aran-Fey Kevin    7 年前

    @property.getter

    class Parent:
        @property
        def p(self):
            return 'parent'
    
        @p.setter
        def p(self, value):
            print('setting p to', value)
    
        @p.deleter
        def p(self):
            print('deleting p')
    
    class Child(Parent):
        @Parent.p.getter
        def p(self):
            return 'child'
    
    print(Parent().p)  # output: parent
    print(Child().p)   # output: child
    Child().p = 3      # output: setting p to 3
    del Child().p      # output: deleting p
    
        3
  •  0
  •   bruno desthuilliers    7 年前

    @property
    def p(self):
        return self._p