首页 > 解决方案 > 为什么我们在 python 中需要属性/getter/setter?

问题描述

只想了解python中的属性/getter/setter。手头有两个问题,能帮忙回答一下吗?谢谢。

  1. 通过几个线程,基本知识是我们可以使用 getter/setter 将一些属性设为私有,然后通过使用属性,我们可以像 public 一样使用这些属性。那么为什么我们需要这个?因为原来__init__是公开的

  2. 几个线程给了我们一个例子,我们可以在 setter 中添加值约束。我的问题是为什么我们__init__不像下面的代码那样直接在里面添加约束?

class test1:
  def __init__(self, num):
     if type(num) == int:
         self.num = num
     else:
         raise TypeError('we need int')

标签: python

解决方案


你一开始就不需要它们——正如你所写的,你可以只使用实例变量:

def __init__(self):
    self.the_answer = 42

但是,如果您稍后将实现更改为使用函数而不是变量,则可以将其更改为:

def __init__(self):
    self._the_answer = None

@property
def the_answer(self):
    if self._the_answer is None:
         self._the answer = self.calculate_answer() 
    return self._the_answer

无需更改 API。在此示例中,它使用惰性求值来仅在访问时进行计算,但在许多其他情况下这可能会有所帮助:

  • 从多个变量计算属性值,因此不需要单个变量
  • 向设置器添加约束以仅允许设置某些值
  • 不要添加设置器以具有只读属性
  • 使某些事件的值无效并仅在这种情况下重新计算它们
  • 覆盖子类中属性的行为

推荐阅读