有没有一种方法可以检查属性是否有设置器?

太空汉堡

在Python 3.X中,有没有一种方法可以检查类是否为其属性之一定义了setter方法?

假设我有以下示例:

class Test:
  def __init__(self):
    self._p = None

  @property
  def my_property(self):
    return self._p

  @my_property.setter
  def my_property(self, new_value):
    self._p = new_value

我可以检查是否my_property已定义,hasattr但找不到找到已定义二传手的方法。

这是我没有成功考虑的两种方法:

  1. 使用hasattr发现如果一个方法命名my_property.setter或类似的东西存在。
  2. 使用该inspect.signature函数查看该方法my_property是否具有2个参数(self和new_value)。

我猜想这个问题的扩展答案还将考虑如何检测吸气剂的存在(使属性与吸气剂方法有所不同,因为当我们认为应该是因为它是一种方法时会callable(test.my_property)返回)。FalseTrue

L3viathan

您可以测试.fset属性是否为None

>>> Test.my_property.fset is not None  # has a setter
True
>>> Test.my_property.fdel is not None  # has no deleter
False

您也可以通过同样的方式测试它是否具有吸气剂(通过.fget)。要测试该属性是否完全是属性,可以测试isinstance(Test.my_property, property)

确保始终在类级别而不是单个实例上调用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以检查数据属性是否存在?

有没有一种方法可以检查对象的属性是否具有值?

有没有一种方法可以设置属性的属性?

有没有一种方法可以检查var是否正在使用setInterval()?

有没有一种方法可以检查函数是否在python中是递归的?

有没有一种方法可以检查按钮是否被选中?

有没有一种方法可以检查处理器缓存是否最近已刷新?

有没有一种方法可以检查流在Java中是否有限?

有没有一种方法可以检查是否有指向目录的符号链接?

有没有一种方法可以检查是否有指向目录的符号链接?

有没有一种方法可以检查Qt中的QObject指针是否仍然有效?

有没有一种方法可以检查是否有人在听dbus信号?

有没有一种方法可以在调用之前检查操作是否有效?

有没有一种方法可以获取具有set方法的属性?

有没有一种方法可以检查GTK小部件是否支持属性,而无需检查版本号?

有没有一种方法可以检查变量是否等于一组值?| C

有没有一种方法可以检测是否有打开的抽屉?

有没有一种方法来检查QJsonObject对象是否包含特定属性?

有没有一种方法可以检查WPF当前是否在设计模式下执行?

有没有一种方法可以使用PyMongo检查collection.find是否返回false?

有没有一种方法可以检查是否在spring上下文中定义了bean?

有没有一种方法可以检查用户是否对您的应用进行了评分?

有没有一种方法可以宏检查是否存在特定的过滤器选项?

有没有一种方法可以检查变量是否为JavaScript中的Date?

有没有一种方法可以检查是否在编译时声明了变量?

有没有一种方法可以检查std :: future状态是否处于等待状态?

有没有一种方法可以在调用前检查Twig过滤器是否存在?

有没有一种方法可以检查用户是否正在流式传输并显示它?

有没有一种方法可以检查提交后Java对象是否已更改