在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
但找不到找到已定义二传手的方法。
这是我没有成功考虑的两种方法:
hasattr
发现如果一个方法命名my_property.setter
或类似的东西存在。inspect.signature
函数查看该方法my_property
是否具有2个参数(self和new_value)。我猜想这个问题的扩展答案还将考虑如何检测吸气剂的存在(使属性与吸气剂方法有所不同,因为当我们认为应该是因为它是一种方法时会callable(test.my_property)
返回)。False
True
您可以测试.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] 删除。
我来说两句