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

Python类继承报错:'tuple'对象无'emp_info'属性求助

解决Python类继承中的AttributeError: 'tuple' object has no attribute 'emp_info'

你这是踩了个典型的小坑——报错明明白白告诉你:你调用parent.emp_info()时,parent根本不是Person或Employee类的实例,而是一个元组(tuple),元组里当然没有emp_info方法啦。

错误根源分析

大概率是你创建实例时写错了语法,比如不小心写成了这样:

parent = Person, "Mayur", "Potdar"  # 这会把parent变成包含类和两个字符串的元组

而正确的实例创建方式应该是调用类的构造方法:

parent = Person("Mayur", "Potdar")  # 这样才会生成Person类的实例

修正后的完整代码示例

我把你没写完的get_emp_details方法补全了,同时加上正确的实例调用逻辑:

class Person:
    def __init__(self, fname, lname):
        self.fname = fname
        self.lname = lname
        self.email = fname + lname + '@company.com'

    def emp_info(self):
        return self.email

class Employee(Person):
    def __init__(self, fname, lname, ID, Cell_No):
        # 这里也可以用Python3更推荐的super()写法,适配多继承场景
        # super().__init__(fname, lname)
        Person.__init__(self, fname, lname)
        self.ID = ID
        self.Cell_No = Cell_No

    def get_emp_details(self):
        return f"Name: {self.fname} {self.lname}, Email: {self.emp_info()}, ID: {self.ID}, Cell: {self.Cell_No}"

# 正确创建Person实例并调用方法
parent = Person("John", "Doe")
print(parent.emp_info())  # 输出: JohnDoe@company.com

# 测试Employee子类的功能
emp = Employee("Mayur", "Potdar", "EMP101", "1234567890")
print(emp.get_emp_details())

额外小提醒

  • Python3里优先用super().__init__(fname, lname)代替直接调用父类的__init__方法,代码会更灵活。
  • 调用类方法前一定要确认:变量是该类(或子类)的实例,而不是类本身、元组、列表这类其他类型的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:01