Python @classmethod返回NoneType属性错误问题求助
问题修复方案
核心错误点
- 类方法
@classmethod的第一个默认入参是类本身cls,并非实例对象self,原代码中在类方法内直接使用self属于未定义变量,逻辑不成立 - 作为构造类实例的类方法,必须返回
cls(参数)生成的实例对象,原get_info没有return语句,默认返回None,这是你调用后报Nonetype属性错误的根本原因 input()的返回值默认是字符串类型,shells和taps需要转换为整数,否则__init__中计算total时会出现类型错误
修正后完整代码
class User: def __init__(self, date, name, phone, shells, taps): self.date = date self.name = name self.phone = phone self.shells = shells self.taps = taps self.total = (shells * 100) + (taps * 50) # 原冗余写法优化,直接初始化空列表即可 self.swaps = [] @classmethod def get_info(cls): # 类方法内不需要self,直接接收输入并存为临时变量 date = input('Enter the date: ') name = input('Enter the full name: ') phone = input("Enter the phone number: ") # 数值类型输入转int shells = int(input('Enter the number of shells: ')) taps = int(input('Enter the number of taps: ')) # 调用构造方法返回实例 return cls(date, name, phone, shells, taps)
调用示例
# 直接调用类方法即可得到初始化完成的User实例 new_user = User.get_info() # 可以正常访问所有实例属性 print(new_user.name) print(new_user.total)
内容的提问来源于stack exchange,提问作者Krys M
相关产品推荐
相关产品推荐

