python - 如何连接父类的 __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
解决方案
你这里有一个错误:
super().__init__(self, emp_name, emp_address)
它应该是:
super().__init__(emp_name, emp_address, veh)
虽然不清楚从哪里来veh
。实际上,您将派生类实例作为emp_name
.
推荐阅读
- google-apps-script - 如何确保 onEdit 函数不会误触发
- java - 如果方法采用原始类型,如何将字符串转换为 setter 函数?
- python - 是否可以将熊猫系列附加到列表中
- angular - 从 Angular 中的表中删除一个或多个选定数据
- java - 如何在 Java 中实现非抢占式优先级调度?
- javascript - 使用 Input 隐藏和显示特定类名的 div 并且仅显示一个类
- sql-server - SQL Server - DB_LINK 问题的 EXEC()
- pandas - 熊猫数据框 - 取消组合连接列
- nginx - 解决方案是什么,Nginx 在我重新启动时停止
- javascript - 如何使用 JavaScript 观察 URL 的变化?