【问题标题】:Increment class property attribute in setter在 setter 中增加类属性属性
【发布时间】:2019-07-16 23:36:38
【问题描述】:

我理解python中getter/setter的概念。我无法理解的是,我需要为变量本身添加新值,我不确定如何使用 @property 装饰器来实现这一点。

旧代码实例化一些变量并自增。我正在尝试重构代码并将这些变量移动到一个类中并添加@property/setter,以便我可以将它们作为属性访问。

旧代码:

class ExistingCode(object):
   a = 0
   b = 0
   c = 0
   d = 0

   bunch of other code..

   a += 12
   b += 12
   c += 12
   d += 12

我想做的是:

class Variables(object):
   def __init__(self):
        a = 0
        b = 0
        c = 0
        d = 0

    @property
    def a(self):
        return self.a

    @a.setter
    def a(self, x)
        a = x

    ......

我收到“RuntimeError:超出最大递归深度”。请帮忙。

【问题讨论】:

  • 您需要为实际属性指定一个与属性名称不同的名称(如documentation 中为x 属性显示的示例。
  • @martineau - 你是对的。我添加了使用该属性的正确方法。感谢您指出这一点。

标签: python properties


【解决方案1】:

我发现了问题。主要问题是我对@martineau 提到的属性和属性使用了相同的名称。另外,我在很多地方都想念自己。下面是工作示例。

class Variables(object):
    def __init__(self):
        self.a = 0

    @property
    def a(self):
        return self.__a

    @a.setter
    def a(self, x):
        self.__a = x

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2019-06-04
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多