簡體   English   中英

檢查類屬性是否有 setter

[英]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存儲在fgetfsetfdel屬性中。 如果屬性沒有設置器或刪除器,則該屬性設置為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.

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