簡體   English   中英

有沒有辦法檢查一個屬性是否有一個setter?

[英]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 是否定義的方法。

以下是我認為沒有成功的兩種途徑:

  1. 使用hasattr查找名為my_property.setter或類似方法的方法是否存在。
  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM