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

Python类变量或@属性

  •  13
  • APorter1031  · 技术社区  · 8 年前

    我正在编写一个python类来存储数据,然后另一个类将创建该类的实例来打印不同的变量。一些类变量需要很多格式,这可能需要多行代码才能使其处于“最终状态”。

    用这种结构从类外访问变量是不是不好?

    class Data():
        def __init__(self):
            self.data = "data"
    

    class Data:
        @property
        def data(self):
            return "data"
    
    3 回复  |  直到 7 年前
        1
  •  12
  •   developer_hatch    8 年前

    如果您这样做,请小心:

    class Data:
        @property
        def data(self):
            return "data"
    
    d = Data()
    d.data = "try to modify data"
    

    AttributeError:无法设置属性

    正如我在你的问题中看到的,你希望能够转换数据直到其最终状态,所以,选择另一个选项

    class Data2():
        def __init__(self):
            self.data = "data"
    
    d2 = Data2()
    d2.data = "now I can be modified"
    

    或修改previus:

    class Data:
      def __init__(self):
        self._data = "data"
    
      @property
      def data(self):
          return self._data
    
      @data.setter
      def data(self, value):
        self._data = value
    
    d = Data()
    d.data = "now I can be modified"
    
        2
  •  7
  •   Raymond Hettinger    8 年前

    常见做法

    Python中的正常做法是直接公开属性。如果在获取或设置时需要其他操作,则可以稍后添加属性。

    属性() 除非有特定原因(例如使属性为只读)。

    使用的可能性 属性() 事后意味着我们不需要练习 defensive programming

        3
  •  1
  •   Manoj Bisht    8 年前

    基本上,您可以隐藏属性中的许多复杂性,使其看起来像一个属性。这提高了代码的可读性。

    此外,您需要理解属性和属性之间的差异。 What's the difference between a Python "property" and "attribute"?