Python类实现单词阴阳性判断报错:'Gender'对象无'male'属性
问题解决:基于Gender类实现性别判断
错误原因分析
- 属性未定义:原代码中
Gender类未声明male和female属性,直接访问gender.male会触发AttributeError。 __eq__方法误用:Python中__eq__是重载==运算符的特殊方法,正确签名应为def __eq__(self, other),原代码参数定义不符合规范,无法实现比较逻辑。
修正后的代码
variable1 = "Pedro" class Gender: class _GenderChecker: def __init__(self, rule): self.rule = rule def __eq__(self, word): if isinstance(word, str): return self.rule(word) return False # 修正规则:匹配示例输入的实际逻辑——以西语名字惯例,o结尾为阳性,a结尾为阴性 male = _GenderChecker(lambda x: x.endswith('o')) female = _GenderChecker(lambda x: x.endswith('a')) gender = Gender() if variable1 == gender.male: print(f"{variable1} is male") elif variable1 == gender.female: print(f"{variable1} is female") else: print(f"{variable1} gender unknown")
代码说明
- 内部类封装判断逻辑:
_GenderChecker内部类通过构造函数接收判断规则(lambda函数),重载__eq__方法实现字符串与性别规则的比较。 - 类属性暴露性别规则:
Gender类的male和female属性是_GenderChecker实例,分别绑定对应判断规则,满足你要求的variable1 == gender.male调用形式。 - 适配示例输入:原需求中“开头”应为笔误,调整为“结尾”规则后才能正确匹配
Pedro(o结尾)和Lola(a结尾)的示例输出。
测试结果
- 输入
"Pedro"时,输出Pedro is male - 输入
"Lola"时,输出Lola is female
内容的提问来源于stack exchange,提问作者Evangelos Dellas
相关产品推荐
相关产品推荐

