Python动态创建类遇AttributeError:类对象无对应属性求助
问题分析与修复
你的代码核心问题是参数名冲突:make_class函数接收的*args是你定义的类属性名列表(比如"name"、"species"),但内部Class的__init__方法又使用了同名的*args,这里的args会覆盖外部的属性名列表,变成实例化时传入的属性值(比如"Bob"、"Dog")。
这导致你的循环实际上是把"Bob"这类属性值当作属性名来绑定,自然找不到name这个正确的属性。
修复后的代码
def make_class(*attr_names): class Class: def __init__(self, *attr_values): # 将属性名与对应属性值一一绑定到实例 for name, value in zip(attr_names, attr_values): setattr(self, name, value) return Class Animal = make_class("name", "species", "age", "health", "weight", "color") dog1 = Animal("Bob","Dog",5,"good","50lb","brown") print(dog1.name) # 输出 Bob
关键改动说明
- 把
make_class的参数名改为*attr_names,彻底避免和__init__的参数重名 - 使用
zip将属性名列表和实例化传入的属性值列表一一配对,正确设置实例属性
可选优化
如果担心属性值数量和属性名数量不匹配,可以在__init__中增加校验:
def __init__(self, *attr_values): if len(attr_values) != len(attr_names): raise ValueError(f"需传入{len(attr_names)}个属性值,实际传入{len(attr_values)}个") for name, value in zip(attr_names, attr_values): setattr(self, name, value)
内容的提问来源于stack exchange,提问作者AtomicBurrito
相关产品推荐
相关产品推荐

