[英]Check if class property has a setter
我需要列出一個類的所有屬性,這些屬性是屬性並且有一個 setter。 例如這個類:
class MyClass(object):
def __init__(self):
self. a = 1
self._b = 2
self._c = 3
@property
def b(self):
return self._b
@property
def c(self):
return self._c
@c.setter
def c(self, value):
self._c = value
我需要獲取屬性 c 而不是 a 和 b。 使用這個答案: https : //stackoverflow.com/a/5876258/7529716我可以獲得屬性對象 b 和 c。
但是他們是一種知道這些屬性是否有除嘗試之外的 setter 的方法:
inst = MyClass()
try:
prev = inst.b
inst.b = None
except AttributeError:
pass # No setter
finally:
inst.b = prev
提前致謝。
property
對象分別將它們的 getter、setter 和fset
存儲在fget
、 fset
和fdel
屬性中。 如果屬性沒有設置器或刪除器,則該屬性設置為None
。
這意味着您可以簡單地過濾掉fset
屬性設置為None
那些屬性:
def get_writeable_properties(cls):
return [attr for attr, value in vars(cls).items()
if isinstance(value, property) and value.fset is not None]
>>> get_writeable_properties(MyClass)
['c']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.