繁体   English   中英

为什么我们需要在python中使用property/getter/setter?

[英]why we need property/getter/setter in python?

只想了解python中的property/getter/setter。 手头有两个问题,请您帮忙解答一下好吗? 谢谢。

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

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

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

您首先不需要它们 - 正如您所写的,您可以只使用实例变量:

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。 在这个例子中,它使用惰性求值来仅在访问时进行计算,但还有很多其他情况下这会有所帮助:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM