检查属性是否可设置/可删除

Nei*_*l G 16 python properties

如何在Python中检查属性是否可设置或可删除?

到目前为止我发现的最好的是

type(obj).__dict__["prop_name"].fset is not None
Run Code Online (Sandbox Code Playgroud)

Cat*_*lus 8

这是一个很好的情况,当你应该订阅"它更容易要求宽恕而不是权限"的理念,并且只是在属性不可设置 /可删除的情况下处理异常.

try:
    x.prop = 42
except AttributeError:
    pass
Run Code Online (Sandbox Code Playgroud)

  • 好答案.我考虑过这一点,但我会自动从属性构建UI并使用它们的"可设置性"来决定设置`ItemIsEditable`标志.我想我可以查看`x.prop = x.prop`或改变我的设计. (2认同)
  • @Neil:如果你编写了有问题的代码,并且知道说'x.prop = x.prop`总是安全的,那么检查就没问题了.但是,属性设置器可能会执行意外操作,例如点击数据库或增加计数器或以其他方式更改系统的内部状态,因此除非没有其他方法,否则我将避免调用它们.您在问题中提到的解决方案对我来说似乎最好. (2认同)