[英]Is there a way to check if a property has a setter?
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
定義,但我找不到檢查 setter 是否定義的方法。
以下是我認為沒有成功的兩種途徑:
hasattr
查找名為my_property.setter
或類似方法的方法是否存在。inspect.signature
函數查看方法my_property
是否有2 個參數(self 和new_value)。 我想這個問題的擴展答案也會考慮如何檢測 getter 的存在(區分屬性和 getter 方法,因為callable(test.my_property)
在我們可能認為它應該是True
時返回False
,因為這是一種方法)。
您可以測試.fset
屬性是否為None
:
>>> Test.my_property.fset is not None # has a setter
True
>>> Test.my_property.fdel is not None # has no deleter
False
同樣的方式你也可以測試它是否有一個 getter(通過.fget
)。 要測試該屬性是否是一個屬性,您可以測試isinstance(Test.my_property, property)
。
確保始終在類級別而不是在單個實例上調用這些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.