如何确定Python类属性是否为只读/可写?
我试图使用如何确定Python类属性是否为只读/可写?,python,python-3.x,Python,Python 3.x,我试图使用inspect.getmembers()列出类的所有可写属性。有没有办法查询类属性是只读的还是可写的 编辑:我使用的是来自的第一个解决方案,在尝试复制只读属性(例如\uuuu doc\uu)时出错。我想筛选这些只读属性并只复制可写属性默认情况下大多数名称都是可设置的。例外情况是定义的和类 数据描述符是具有且至少具有或方法的类的任何属性。这些方法在尝试设置或删除类实例的属性时使用 带有\uuu set\uu方法的数据描述符可能不可写,这将取决于描述符的具体实现。A是这样的数据描述符;如果
inspect.getmembers()
列出类的所有可写属性。有没有办法查询类属性是只读的还是可写的
编辑:我使用的是来自的第一个解决方案,在尝试复制只读属性(例如
\uuuu doc\uu
)时出错。我想筛选这些只读属性并只复制可写属性默认情况下大多数名称都是可设置的。例外情况是定义的和类
数据描述符是具有且至少具有或方法的类的任何属性。这些方法在尝试设置或删除类实例的属性时使用
带有\uuu set\uu
方法的数据描述符可能不可写,这将取决于描述符的具体实现。A是这样的数据描述符;如果属性
的fset
属性设置为None
,则该属性将不可写。如果property().fset
未设置为None
,而是设置为可调用,则该可调用将确定该属性是否可写
此外,任何只有\uuuuu delete\uuuu
方法的数据描述符也无法写入,缺少\uuuu set\uuuu
方法会导致在实例上设置属性名称时出现AttributeError
\uuuu setattr\uuuu
钩子截取所有属性设置,并可以防止任何此类操作失败。还有一个对应的\uuuu delattr\uuuu
钩子,如果您想将删除属性计算为写入,那么这个钩子很重要
换句话说,一旦涉及到描述符或
\uuu setattr\uuuu
钩子,就很难确定这一点,而不是以一般的方式?只读或可写对您意味着什么(您指的是@property
?关于通过\uuuu getattr[ibute]\uuuuu
/\uuuu setattr\uuuuu
的干扰如何?)我使用的是来自的第一个解决方案,在复制只读属性(例如doc)时出错。我想归档这些只读属性,只复制可写属性。请在问题中加入上下文。