问题标签 [python-descriptors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python __set_name__ 中的异常行为
我有一个使用 Python 3.6+ 的子类,__set_name__
以确保拥有的类已经注释了携带子类的字段的类型。如果他们没有引发异常。
但是,任何引发的异常总是被 Python 捕获并被RuntimeError
引发。
例如:
结果是:
这很可能是预期的行为(找不到对__set_name__
异常的特定引用),但也可能表明期望__set_name__
永远不会遭受异常。
我看到的行为不是问题,因为在正确的条件下会发生异常。但是,由于我不能确定引发的异常是我的代码引发的异常,因此测试起来很棘手。
有没有更好的方法来引发一个适合测试的异常,或者确实有一种简单的方法来检查由 包裹的异常RuntimeError
确实是我的代码引发的异常?
python - 类本地函数中的访问描述符
我想知道如何在不同的函数中访问描述符?当我初始化 Vehicle 类时,我可以将速度初始化为描述符,但是我无法在 Vehicle 函数 (calc_speed()-> self.speed.value) 中访问它的值返回AttributeError: 'int' object has no attribute 'value'
。此外,不应该更改值audi.speed = 120
触发set功能(以及打印应该触发get功能)?
我的期望
python - 如何在初始化时读取变量的名称并将其存储在 python 中的描述符类中?
我的计划是这样的:使用 python 描述符,我想在赋值时读取变量的名称。当前代码:
我使用描述符的原因是在编译时实现静态类型并为字段分配和声明提供一个包装器。如果我要在课堂上实现它......
目标:如何在没有直接引用的情况下将变量 num 的名称作为字符串并将其分配给 Descriptor 类中的字段,例如self.name
?因此,当我更改类的不同实例中的值时,我可以只写instance.__dict__[self.name] = constant
?
python - 如何在属性获取时使用添加描述符来捕获和引发 TypeError?
在不对类进行更改的情况下,实现一个描述符,该描述符检查获取到实例属性的值是否具有正确的类型。
我找到了一个相关的帖子,但我不知道如何在我的情况下实现它。 了解 __get__ 和 __set__ 以及 Python 描述符
像这样:
python - Python:从列表中动态生成属性
我希望能够从列表或字典中动态生成类的属性。这个想法是我可以定义一个属性列表,然后能够使用访问这些属性my_class.my_attribute
例如:
这显然行不通,因为cls
不存在,但我想:
返回 的campaign_type
值campaign
。这显然有点复杂,因为campaign_type
实际上是 a并且做了一些工作来从基础对象Descriptor
中检索一个值。Label
描述符:
这使我可以轻松访问标签的值,如果标签是我关心的类型,它将返回相关值,否则将返回False
.
标签对象:
因此,如果我的标签(基本上只是一个包装器)中存储了一个 protobuf 标签对象,它看起来像这样:
然后my_label.campaign_type
会返回Primary
,同样my_label.match_type
会返回False
原因是我正在创建许多以相同方式标记的类,并且可能有很多标签。目前这一切都按描述工作,但我希望能够更动态地定义属性,因为它们基本上都遵循相同类型的模式。所以而不是:
我只是有: _LABELS = ['campaign_type', 'match_type', 'audience_type', ... many more labels]
然后有一些循环来创建属性。
反过来,我可以将类似的方法级联到我的其他类,这样虽然一个Campaign
对象可能包含一个Label
对象,但我可以通过简单地访问标签的值my_campaign.campaign_type
。如果活动没有适当类型的标签,它将简单地返回False
。
python - 如何在python中向描述符或属性添加方法
我正在尝试编写一个可以轻松扩展的模拟类。为此,我想使用类似于属性的东西,但这也提供了update
一种可以针对不同用例以不同方式实现的方法:
默认模拟可以这样使用:
我想以这样的方式编写它,以便可以以任何用户定义的方式扩展模拟,例如添加另一个以不同方式更新的数量:
这有可能以某种方式还是有其他方法可以实现类似的行为?我已经看到了这个问题,这可能会有所帮助,但答案似乎很不优雅——我的案例有没有好的面向对象的方法?
python - 如何解决 Python 中的属性错误?
我正在学习python中的描述符。我正在尝试代码,但得到下面提到的属性错误。
AttributeError:“celciusDescriptor”对象没有属性“_celciusDescriptor__fahrenheit”
我试图通过获取华氏温度来获得输出为(32,0),即(华氏,摄氏度)。
'''
'''
python - 在 Python 3.6+ 中实现描述符的正确方法是什么?
在YouTube 上的Raymond Hettingers心理游戏中:
Daw-Ran Liou 在用 Python 3.6+ 编写描述符中指出:
[...] 我们需要直接访问dict对象,而不是使用内置函数 getattr 和 setattr,因为内置函数也会被描述符协议拦截并导致 RecursionError。
但 Matthew Egans在 YouTube 上描述描述符时说:
实现描述符的正确方法是什么?