You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Python类的可设置属性?附类A示例验证

针对你想找出类的可设置属性的需求,结合你给出的class A示例,我整理了两种实用思路:

思路一:先列出类的所有属性,再筛选可设置项

首先先把你给出的class A补全(原代码未写完),完整可运行的代码如下:

class A(object):
    def __init__(self):
        self._var_a = 1
        self._var_b = 2

    @property
    def var_a(self):
        return self._var_a

    @var_a.setter
    def var_a(self, value):
        self._var_a = value

    @property
    def var_b(self):
        return self._var_b

    @property
    def settable_properties(self):
        settable_props = {}
        # 遍历类层面的所有属性
        for name, attr in self.__class__.__dict__.items():
            # 筛选出带setter的property属性
            if isinstance(attr, property) and attr.fset is not None:
                settable_props[name] = getattr(self, name)
        return settable_props

核心逻辑是:property是定义在类层面的特殊对象,我们遍历类的__dict__找出所有property实例,再通过attr.fset判断该属性是否绑定了setter方法——只要fset不为空,就说明这个属性是可设置的。

实例化后调用方法就能得到结果:

obj = A()
print(obj.settable_properties)  # 输出: {'var_a': 1}

思路二:直接判断单个属性是否可设置

如果不需要一次性列出所有可设置属性,而是想单独验证某个属性的可设置性,可以写一个轻量的辅助函数:

def is_property_settable(obj, prop_name):
    # 从类字典中获取目标属性对象
    prop = obj.__class__.__dict__.get(prop_name)
    # 验证是否是带setter的property
    return isinstance(prop, property) and prop.fset is not None

使用示例:

obj = A()
print(is_property_settable(obj, 'var_a'))  # 输出: True
print(is_property_settable(obj, 'var_b'))  # 输出: False

注意:我们要从**类的__dict__**而不是实例的__dict__中获取属性,因为实例的__dict__只存储实例变量(比如_var_a),而property是类层面的定义。

内容的提问来源于stack exchange,提问作者Yassine Faris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:01:10