调用WordFamily.check_type触发AttributeError:类无words属性
问题分析与解决
错误原因
调用check_type时触发AttributeError: type object 'WordFamily' has no attribute 'words',核心问题有两个:
words和suffixes是实例属性(通过self.在__init__中定义),不是类属性,直接用WordFamily.words访问必然找不到。check_type方法既不是实例方法(缺少self参数)也不是类方法(缺少cls参数),调用方式错误,同时原代码逻辑也无法返回期望的"verb"。
修正方案
要实现返回"verb"的需求,同时解决属性访问错误,调整后的代码如下:
修正后的类定义
class WordFamily: def __init__(self, name, words, suffixes): self.name = name # 新增词族名称属性,用于返回结果 self.words = words self.suffixes = suffixes def check_type(self, word): # 遍历词族中的每个词 for w in self.words: if word == w: return self.name # 遍历后缀,判断带后缀的词是否匹配 for suffix in self.suffixes: if word + suffix == w: return self.name return None # 未匹配时返回None
创建实例并调用方法
verb = ["love", "hate"] # 创建词族实例,传入名称"verb" verb_family = WordFamily("verb", verb, [""])
# 调用实例方法,得到期望结果 print(verb_family.check_type("love")) # 输出: verb
关键修正点
- 属性访问修正:将
WordFamily.words改为self.words,通过实例访问属性,避免类属性不存在的错误。 - 方法类型修正:把
check_type改为实例方法,添加self参数,确保能访问实例的所有属性。 - 返回逻辑修正:新增
name属性存储词族名称(如"verb"),满足返回指定结果的需求。 - 后缀判断修正:原代码中字符串直接加列表会报错,改为遍历每个后缀逐一判断。
内容的提问来源于stack exchange,提问作者cconori
相关产品推荐
相关产品推荐

