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

时间:2020-10-22 09:50:10

标签: python python-3.x setter

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

假设我有以下示例:

allow-downloads

我可以检查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定义,但是我找不到方法来检查设置器是否已定义。

这是我认为没有成功的两个途径:

  1. 使用hasattr查找是否存在名为hasattr或类似名称的方法。
  2. 使用my_property.setter函数来查看方法inspect.signature是否具有2个参数(self和new_value)。

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

1 个答案:

答案 0 :(得分:2)

您可以测试.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)

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