You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:04