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

Python编写Student类运行报AttributeError无name属性问题求助

错误原因

你代码中name/uci_name/semester均为实例属性,仅在实例化时绑定到单个Student实例上,不属于Student类本身的属性。你写的assert语句尝试直接从Student类获取对应属性,自然触发AttributeError,同时assert要求属性为property类型,你当前的代码也没有定义类层面的property对象。

修复方案

你需要将三个属性定义为类层面的property,常规写法采用@property装饰器实现,注意要把实例内部存储的属性名改为带_前缀的形式,避免和property重名触发无限递归:

class Student:
    def __init__(self, name, uci_name, semester):
        self._name = name
        self._uci_name = uci_name
        self._semester = semester
    
    @property
    def name(self) -> str:
        return self._name
    
    @property
    def uci_name(self) -> str:
        return self._uci_name
    
    @property
    def semester(self) -> int:
        return self._semester
    
    def __str__(self):
        return f"{self.name} [{self.uci_name}] in Semester {self.semester}"

student_tom = Student("Tom", "tom55", 3)
    
assert isinstance(getattr(Student, "name"), property)
assert isinstance(getattr(Student, "uci_name"), property)
assert isinstance(getattr(Student, "semester"), property)

如果你想保留原有get_开头的方法,也可以直接在类末尾用property()函数绑定:

class Student:
    def __init__(self, name, uci_name, semester):
        self._name = name
        self._uci_name = uci_name
        self._semester = semester
    
    def get_name(self) -> str:
        return self._name
    
    def get_uci_name(self) -> str:
        return self._uci_name
    
    def get_semester(self) -> int:
        return self._semester
    
    # 直接在类层面定义property
    name = property(get_name)
    uci_name = property(get_uci_name)
    semester = property(get_semester)
    
    def __str__(self):
        return f"{self.name} [{self.uci_name}] in Semester {self.semester}"

以上两种写法都可以通过你给出的assert校验。

内容的提问来源于stack exchange,提问作者mayn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:04