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
相关产品推荐
相关产品推荐

