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
定义,但是我找不到方法来检查设置器是否已定义。
这是我认为没有成功的两个途径:
hasattr
查找是否存在名为hasattr
或类似名称的方法。my_property.setter
函数来查看方法inspect.signature
是否具有2个参数(self和new_value)。我猜想这个问题的扩展答案还将考虑如何检测吸气剂的存在(使属性和吸气剂方法有所不同,因为my_property
在可能的情况下会返回callable(test.my_property)
认为它应该是False
,因为它是一种方法)。
答案 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)
。
确保始终在类级别而不是单个实例上调用它们。