二传手和吸盘手做什么?数据隐藏在这里的作用是什么?



你能解释一下隐藏在这里的数据的含义吗?我也不明白setter在这里做什么,以及setter方法之后的代码做什么。

我的解释:

  1. 我们创建了一个名为 pizza 类 pizza 的实例,其浇头属性等于 ["cheese"、"tomato"] 给出的字符串列表。
  2. 当我们使用代码 print(pizza.pineapple_allowed( 时,它会转到该属性方法,使其成为只读属性,然后返回到 self,从而返回到 False。

之后我就不明白了。请帮忙!

class Pizza:
def __init__(self, toppings):
self.toppings = toppings
self._pineapple_allowed = False
@property
def pineapple_allowed(self):
return self._pineapple_allowed
@pineapple_allowed.setter
def pineapple_allowed(self, value):
if value:
password = input("Enter the password: ")
if password == "Sw0rdf1sh!":
self._pineapple_allowed = value
else:
raise ValueError("Alert! Intruder!")
pizza = Pizza(["cheese", "tomato"])
print(pizza.pineapple_allowed)
pizza.pineapple_allowed = True
print(pizza.pineapple_allowed)

Getters 和 setter 通过包装 class 属性并处理此属性的获取和操作来"隐藏"类属性,而不是直接公开该属性。

在此示例中,setter(由@pineapple_allowed.setter修饰(将_pineapple_allowed属性的操作限制为输入正确密码 (Sw0rdf1sh!的用户。如果未输入正确的密码,则会引发异常,并且不会更改属性。虽然这只是一个演示(要求输入存储在源代码中的密码不是很安全(,但这确实显示了 setter 的用途:它们允许您对属性将设置为的值进行检查,并执行除将属性设置为此值之外的其他操作。

对于您的示例,代码执行将如下所示:

>>> pizza = Pizza(["cheese", "tomato"])  # create a Pizza instance
>>> print(pizza.pineapple_allowed)  # print the value of pizza._pineapple_allowed
False
>>> pizza.pineapple_allowed = True  # set the value of pizza._pineapple_allowed, this will ask for a password
Enter the password: Sw0rdf1sh!
>>> print(pizza.pineapple_allowed)  # we entered the password, so pizza._pineapple_allowed has been set to True
True

或者,如果您输入了错误的密码

>>> pizza = Pizza(["cheese", "tomato"])  # create a Pizza instance
>>> print(pizza.pineapple_allowed)  # print the value of pizza._pineapple_allowed
False
>>> pizza.pineapple_allowed = True  # set the value of pizza._pineapple_allowed, this will ask for a password
Enter the password: wrong_password
Traceback (most recent call last):
File "<stdin>", line 17, in <module>
ValueError: Alert! Intruder!

有关getter和setter的更多信息,这篇文章很好地概述了使用它们的原因。

最新更新