Yas*_*ris 5 python properties python-2.7
我需要列出一个类的所有属性,这些属性是属性并且有一个 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
Run Code Online (Sandbox Code Playgroud)
我需要获取属性 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
Run Code Online (Sandbox Code Playgroud)
提前致谢。
property对象存储他们的getter,setter和删除器中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]
Run Code Online (Sandbox Code Playgroud)
>>> get_writeable_properties(MyClass)
['c']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |