Python导入类报错ImportError: cannot import name Person如何解决
错误原因
- 核心原因是自定义文件与Python标准库模块重名:
abc是Python内置的官方标准库模块(用于实现抽象基类能力),执行from abc import Person时,解释器默认优先加载内置的abc模块,该模块中没有Person类,因此触发导入报错。 - 额外存在两处代码逻辑错误,解决导入问题后也会触发报错:
on_honor_roll方法的缩进错误,定义在了Person类外部,不属于类的成员方法,实例调用时会抛出属性不存在的错误。- 实例化
Person时传入的gpa参数为字符串类型,无法直接与数值3.5做大小比较。
解决步骤
- 重命名你自定义的
abc.py文件,改为不与标准库重名的名称,例如person.py,同时删除同目录下生成的__pycache__缓存文件夹,避免旧缓存影响导入。 - 修正
person.py的代码,调整方法缩进,同时增加gpa的类型转换逻辑:
class Person: def __init__ (self, age, weight, height, first_name, last_name, gpa ): self.age = age self.weight = weight self.height = height self.first_name = first_name self.last_name = last_name # 将gpa转为浮点数用于后续数值比较 self.gpa = float(gpa) # 缩进调整到类内部,成为实例方法 def on_honor_roll(self): if self.gpa >= 3.5: return True else: return False
- 修改
object_functions.py的导入语句,对应修改后的文件名:
from person import Person
- 调整实例化
Person时的gpa参数为合法数值,例如:
user1 = Person(25, 80, 178, "John", "Williams", 3.8) user2 = Person(15, 78, 190, "Joe", "James", 3.2)
内容的提问来源于stack exchange,提问作者Álvaro Lagoa
相关产品推荐
相关产品推荐

