背景 :一个练习面对对象的小练习,关于全职员工兼职员工月薪日薪之类的
错误信息:
张三 = a("张三","1001",6000)
^^^^^^^^^^^^^^^^^^^
TypeError: a.init() takes 3 positional arguments but 4 were given
#a = 全职员工/b = 兼职员工/c = 月新/d = 日薪/e = 计算全职月薪/f = 天数/g = 计算兼职员工月工资
class a:
def __init__(self,name,id):
self.name = name
self.id = id
def print_info(self):
print(f"员工名字:{self.name},工号:{self.id}")
class b(a):
def __init__(self, name, id, c):
super().__init__(name,id)#super()表示父类,用来调用父类
self.c = c
def e(self):
return self.c
class b(a):
def __init__(self, name, id, d, f):
super().__init__(name, id)
self.d = d
self.f = f
def g(self):
return self.d * self.f
张三 = a("张三","1001",6000)
李四 = b("李四","1002",230,15)
张三.print_info()
李四.print_info()
错误部分(报错里写的):
张三 = a("张三","1001",6000)
尝试过的方法:不是super后面括号里面加没加self的问题,好像是其他问题?
还请参考:
这段代码中有两个错误:
在定义类 b 时,重复定义了类 b 覆盖了之前的类 b。
在创建对象张三时,参数列表长度与类 a 的 init 方法不匹配。
代码如下:
class Employee:
def __init__(self, name, id):
self.name = name
self.id = id
def print_info(self):
print(f"员工名字:{self.name},工号:{self.id}")
class FullTimeEmployee(Employee):
def __init__(self, name, id, salary):
super().__init__(name,id)
self.salary = salary
def calc_monthly_salary(self):
return self.salary
class PartTimeEmployee(Employee):
def __init__(self, name, id, hourly_wage, days):
super().__init__(name, id)
self.hourly_wage = hourly_wage
self.days = days
def calc_monthly_salary(self):
return self.hourly_wage * self.days
zhangsan = FullTimeEmployee("张三","1001",6000)
lisi = PartTimeEmployee("李四","1002",230,15)
zhangsan.print_info()
lisi.print_info()
运行结果
员工名字:张三,工号:1001
员工名字:李四,工号:1002
6000是个什么东西
只有3个形参,self自动被实例填充了,"张三","1001"对应的是name和id,6000是什么
在类实例方法中,self
代表类实例对象本身,不用传参。
发现的问题:
① 在同一个py文件中,类名不同重复,所以只能有一个b的类
② 变量名一般不会用中文定义
修改后的代码:
# a = 全职员工/b = 兼职员工/c = 月新/d = 日薪/e = 计算全职月薪/f = 天数/g = 计算兼职员工月工资
class a:
'''全职员工'''
def __init__(self, name, id):
self.name = name
self.id = id
def print_info(self):
print(f"员工名字:{self.name},工号:{self.id}")
class b(a):
'''月结兼职员工'''
def __init__(self, name, id, c):
super().__init__(name, id) # super()表示父类,用来调用父类
self.c = c
def e(self):
return self.c
class dayb(a):
'''日结兼职员工'''
def __init__(self, name, id, d, f):
super().__init__(name, id)
self.d = d
self.f = f
def g(self):
return self.d * self.f
##月结兼职员工
zhangsan = b("张三", "1001",6000)
##日结兼职员工
lisi = dayb("李四", "1002", 230, 15)
zhangsan.print_info()
lisi.print_info()