首页 > 解决方案 > 如何连接父类的 __str__() 函数中的文本?

问题描述

执行附加代码时出现此错误 - TypeError:必须是 str,而不是 FullTimeEmployee。

class Employee(object):
    def __init__(self, emp_name, emp_address, veh):
        self.__employee_name = emp_name
        self.__employee_address = emp_address
        self.__vehicle = veh #Aggregation

    def get_name(self):
        return self.__employee_name

    def get_address(self):
        return self.__employee_address

    def get_vehicle_data(self):
        return self.__vehicle

    def set_name(self, emp_name):
        self.__employee_name = emp_name

    def set_address(self, emp_address):
        self.__employee_address = emp_address

    def set_vehicle_data(self, veh):
        self.__vehicle = veh

    def __str__(self):
        emp = "Employee Name: " + self.__employee_name
        emp += "; Employee Address: " + self.__employee_address
        emp += "; Vehicle Data: " + self.__vehicle.__str__()
        return emp
class FullTimeEmployee(Employee):
    def __init__(self, emp_name, emp_address, salary):
        super().__init__(self, emp_name, emp_address)
        self.__emp_salary = salary

    def get_salary(self):
        return self.__emp_salary

    def set_salary(self, salary):
        self.__emp_salary = salary

    def compute_compensation(self):
        if(self.__emp_salary <= 45000):
            return (self.__emp_salary - (0.18*self.__emp_salary))
        elif(self.__emp_salary > 45000 and self.__emp_salary <= 82000):
            return (self.__emp_salary - ((0.18*45000) + (0.28 * (self.__emp_salary - 45000))))
        else:
            return (self.__emp_salary - ((0.18*45000) + (0.28 * (82000 - 45000)) + (0.33*(self.__emp_salary - 82000))))

    def __str__(self):
        childData = super().__str__()
        childData += "\nDetails of this Employee are:" + childData
        childData += "\nSalary: " + + '{0:0.2f}'.format(self.__emp_salary)
        return childData
class Vehicle:
    def __init__(self, make, model, year, mileage):
        self.__veh_make = make
        self.__veh_model = model
        self.__veh_year = year
        self.__veh_mileage = mileage

    def get_make(self):
        return self.__veh_make

    def get_model(self):
        return self.__veh_model

    def get_year(self):
        return self.__veh_year

    def get_mileage(self):
        return self.__veh_mileage

    def set_make(self, make):
        self.__veh_make = make

    def set_model(self, model):
        self.__veh_model = model

    def set_year(self, year):
        self.__veh_year = year

    def set_mileage(self, mileage):
        self.__veh_mileage = mileage

    def __str__(self):
        veh = "Vehicle Make: " + self.__veh_make
        veh += "; Vehicle Model: " + self.__veh_model
        veh += "; Vehicle Year: " + str(self.__veh_year)
        veh += "; Vehicle Mileage: " + str(self.__veh_mileage)
        return veh
veh1 = Vehicle('Sedan', 'Honda Accord', 2001, 24) 
print(Employee('Jane Doe', '7220 McCallum Blvd', veh1))

输出 -

Employee Name: Jane Doe; Employee Address: 7220 McCallum Blvd; Vehicle Data: Vehicle Make: Sedan; 
Vehicle Model: Honda Accord; Vehicle Year: 2001; Vehicle Mileage: 24

但是当我运行以下行时,它会出错。

print(FullTimeEmployee('Jack', 'address', 20000))

输出 -

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-29959e88408c> in <module>
----> 1 print(FullTimeEmployee('Jack', 'address', 20000))

<ipython-input-2-0d1382d05cfc> in __str__(self)
     19 
     20     def __str__(self):
---> 21         childData = super().__str__()
     22         childData += "\nDetails of this Employee are:" + childData
     23         childData += "\nSalary: " + + '{0:0.2f}'.format(self.__emp_salary)

<ipython-input-1-9f660a8017f3> in __str__(self)
     24 
     25     def __str__(self):
---> 26         emp = "Employee Name: " + self.__employee_name
     27         emp += "; Employee Address: " + self.__employee_address
     28         emp += "; Vehicle Data: " + self.__vehicle.__str__()

TypeError: must be str, not FullTimeEmployee

标签: pythonoopinheritance

解决方案


你这里有一个错误:

    super().__init__(self, emp_name, emp_address)

它应该是:

    super().__init__(emp_name, emp_address, veh)

虽然不清楚从哪里来veh。实际上,您将派生类实例作为emp_name.


推荐阅读