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

Python子类调用父类__init__方法出现str无Teamname属性如何解决

问题原因

报错的核心是调用父类__init__方法时未传入实例对象self:

  • 类的实例方法第一个参数永远指向当前实例本身,你直接写Team.__init__(Tname,Torigin)时,程序会把你传入的第一个参数Tname(也就是字符串Gokulam)识别为self,尝试给这个字符串对象设置Teamname属性,自然会抛出'str' object has no attribute 'Teamname'的错误。
  • 额外问题:__str__方法返回的字符串没有加空格,输出结果会连在一起,可读性差。
正确调用父类构造方法的两种方式

方式1:显式调用父类方法,主动传入self

把Team.__init__(Tname,Torigin)改成Team.__init__(self, Tname, Torigin)即可。

方式2:使用super()调用(更推荐,适配多继承场景)

把这行改成super().__init__(Tname, Torigin),不需要手动传self,super()会自动定位父类并传入当前实例。

修复后的完整代码
class Team:
    def __init__(self, Name = "Name", Origin = "india"):
        self.Teamname = Name
        self.Teamorigin = Origin

    def DefTeamname(self, Name):
        self.Teamname = Name
    def defTeamorigin(self, Origin):
        self.Teamorigin = Origin


class Player(Team):
    def __init__(self, Pname, Ppoints, Tname, Torigin):
        # 用super方式调用父类构造
        super().__init__(Tname, Torigin)
        self.Playername = Pname
        self.Playerpoints = Ppoints

    def Scoredpoint(self):
        self.Playerpoints += 1

    def __str__(self):
        # 加空格优化输出格式
        return self.Playername + " has scored " + str(self.Playerpoints) + " points"

Player1 = Player('Sid',0,'Gokulam','Kochi')
print(Player1)
# 输出:Sid has scored 0 points

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:02