- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码:
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!")
我很困惑 @<func>.setter
装饰器不同于仅仅覆盖 __set__
对象中的函数。与 @<func>.getter
相同和__get__
。
就此而言,我想不出 @property
的用例不仅仅是在类中设置变量。
我的想法是错的吗?
最佳答案
使用“@property”描述符,您可以控制单个类属性,在您的情况下cls.pineapple_allowed
,而__get__、__set__和__delete__
是描述符协议(protocol)本身的神奇方法。如果您在任何类中覆盖上述任何方法,则任何类属性的访问/分配/删除都将通过相应的魔术方法进行。
关于python - setter、getter 和 __set__、__get__ 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530931/
来自 here我知道:每个函数实际上都是 class Function 的对象,并且由于描述符协议(protocol),像 a.b 这样的表达式将被传输到 b.__get__ (a,类型(a))。 但
这个问题在这里已经有了答案: Why does a python descriptor __get__ method accept the owner class as an arg? (4 个回答)
我希望能够在将变量传递给跟踪函数时将其设置为包装器。通过一些代码可能更容易理解。这就是我想做的: variables = [] def track(variable): variables.a
我试图了解 __get__ 描述符在下面的代码中正在做什么。我已经写了关于 __get__ 的所有教程,但仍然无法了解这里发生的事情。 class A: def __init__(self,
这个问题在这里已经有了答案: How work pre-defined descriptors in functions? (1 个回答) 关闭 6 年前。 我想问一下简单函数 __get__ 的目
我正在从链接阅读描述符如何工作的解释:http://users.rcn.com/python/download/Descriptor.htm#properties . 但是,在这里,在 Propert
有这段代码: class A: def __init__(self, x): self.x = x def __get__(self, obj, type=None): pri
我正在尝试使用 __get__ 创建一个思考代理特定类型数据的描述符,以便客户端代码可以方便地使用它(最好用示例显示): class Value(object): def __init__(s
class Foo(): def __init__(self): self.bar_ref = self.bar # Allocation occurs here
__get__ 可以实现哪些使用拥有对象上的 getter 方法无法完成的事情? 我能想到更好的关注点分离,但我想还有更多。 最佳答案 它用于描述符。它们有点像 Python 的 getter/set
我有一个装饰器叫做 Special将函数转换为自身的两个版本:一个可以直接调用并在结果前加上前缀 'regular '和一个可以用 .special 调用的并在结果前加上 'special ' 前缀:
我正在阅读 O Reilley Python Cookbook,我对以下代码有疑问: class Typed: def __init__(self, name, expected_type):
我有一个类: from collections import UserList class ItemList(UserList): data = [] def __init__(sel
我确定这将被标记为重复,但我真的不明白我在看什么。我已经查看了有关描述符的 Python 文档,但我已经用 Python 进行了两周的“编程”,但我真的不知道我在寻找什么! 这是我得到的: >>> c
所以我试图在 Python 中实现类似于 C# 事件的东西作为方法的装饰器: from __future__ import annotations from typing import * impor
使用 __get__ 描述符我想实现类似的目标: class Wrapper: def __init__(self, wrapped_value): self._wrapped
来自 https://docs.python.org/2/howto/descriptor.html : descr.__get__(self, obj, type=None) --> value d
全部, 正如标题所问,是否可以在运行时更改 Descriptor 的 __get__ 方法。我所处的情况是我有一个函数在运行时动态地被装饰和未装饰。我希望此函数的结果可用作属性,类似于 @proper
我从 Effective Python item 31 中得到以下示例: from weakref import WeakKeyDictionary class Grade(object):
我在某处读到过这样一个事实,你可以使用 __set__ 而没有 __get__ 的描述符。 它是如何工作的? 它算作数据描述符吗?是非数据描述符吗? 这是一个代码示例: class Desc:
我是一名优秀的程序员,十分优秀!