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

Python中如何避免类对象因属性名拼写错误新增属性?

如何避免Python对象因属性名拼写错误新增属性

用__slots__限制实例属性(推荐方案)

Python里可以通过__slots__类属性,明确指定实例能拥有的属性名称。一旦定义了__slots__,实例就没法新增未列在其中的属性,拼写错误时会直接抛出AttributeError,正好解决你的问题。

修改你的类:

class class_test:
    __slots__ = ('name',)  # 列出所有允许的属性
    def __init__(self, name):
        self.name = name

测试效果:

a = class_test('John')
a.naem = 'Mary'  # 直接触发错误:AttributeError: 'class_test' object has no attribute 'naem'

注意:__slots__只对当前类的实例生效。如果子类没定义自己的__slots__,子类实例仍能新增属性(会自动生成__dict__);如果子类也定义了__slots__,会合并父类的规则。

自定义__setattr__方法实现灵活控制

要是需要更灵活的属性校验逻辑,可以重写类的__setattr__方法,手动检查要设置的属性是否在允许列表里,不在就抛出错误。

示例代码:

class class_test:
    _allowed_attrs = {'name'}  # 定义允许的属性集合
    def __init__(self, name):
        self.name = name
    
    def __setattr__(self, attr_name, value):
        if attr_name not in self._allowed_attrs:
            raise AttributeError(f"'class_test' object has no attribute '{attr_name}'")
        super().__setattr__(attr_name, value)

这种方法适合需要动态调整允许属性的场景,但日常开发用__slots__更简洁高效,还能减少实例的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:26:14