鱼C论坛

 找回密码
 立即注册
查看: 404|回复: 1

关于class的一些细碎小问题

[复制链接]
发表于 2024-3-23 07:20:58 | 显示全部楼层 |阅读模式
8鱼币
题目:
# 类继承练习:人力系统
# 员工分为两类:全职员工FullTimeEmployee、兼职员工PartTimeEmployee.
#-全职和兼职都有"姓名name"、"工号 id",且都能打印姓名、工号。
#-全职有"月薪monthly_salary",
# 兼职有"日薪 daily_salary"和"每月工作天数work_days"
#-全职和兼职都有"计算月薪calculate_monthly_pay"的方法,但具体计算过程不一样。

问题:
1.  老师以下代码为什么不能省去? 我省去后直接写出的代码出现了什么问题?
def __init__(self, name, ID, monthly_salary):
        super().__init__(name, ID)
        self.monthly_salary=monthly_salary

2. 在老师代码 parttime_staff 类 D_salary 方法中 self.daily*self.work_days 为什么不用加float来保证是数字乘以数字,直接相乘不会出现字符串相乘的问题吗?
3. 在我的代码 parttime_staff 类 D_salary 方法中 为什么chatGPT告诉我要删除“{} ”的符号,f + {} 不是配套固定搭配使用吗?

我的代码:
"""HR Department Programming"""

class staff:
    def __init__(self, name, ID):
        self.name=name
        self.ID=ID

    def info_print(self, print_way):
        print(f"名字:{self.name} 工号:{self.ID}")

class falltime_staff(staff):
    def M_salary(self, mounthly_salary):
        print("float(self.ID)*3")
        

class parttime_staff(staff):
    def _init__(self, name, ID, work_days, daily_salary):
        super().__init__(name, staff)
        self.work_days=work_days
        self.daily_salary=daily_salary

    
    def D_salary(self, daily_salary):
        print(f"工资: float({self.work_days}) * float({daily_salary}))

没法回答我问题的老师的代码(我手动修改微量细节-比如employee改成staff-版 ———— 我尽量没变,不排除我改瘸可能):
.
"""HR Department Programming"""

class staff:
    def __init__(self, name, ID):
        self.name=name
        self.ID=ID

    def info_print(self, print_way):
        print(f"名字:{self.name} 工号:{self.ID}")

class falltime_staff(staff):
    def __init__(self, name, ID, monthly_salary):
        super().__init__(name, ID)
        self.monthly_salary=monthly_salary
    
    def M_salary(self):
        return self.monthly_salary
        

class parttime_staff(staff):
    def _init__(self, name, ID, work_days, daily_salary):
        super().__init__(name, staff)
        self.work_days=work_days
        self.daily_salary=daily_salary

    
    def D_salary(self, daily_salary):
        return self.daily*self.work_days


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-23 07:21:10 | 显示全部楼层
回答:

1. 不能省去的原因是,子类(fulltime_staff)继承了父类(staff)的构造函数__init__,如果不调用super().__init__(name, ID),则父类的初始化过程就会被忽略,父类的属性name和ID就无法初始化,导致后续代码出错。你遇到问题的原因是因为在parttime_staff类的构造函数中你误将staff写成了self。正确的代码应该是:
def __init__(self, name, ID, work_days, daily_salary):
    super().__init__(name, ID)
    self.work_days=work_days
    self.daily_salary=daily_salary
2. 在老师的代码中,self.daily*self.work_days是两个已经被赋值的整数,直接相乘不会出现字符串相乘的问题,所以不需要加float来保证是数字乘以数字。
3. 在你的代码中,chatGPT可能是误解了你的意思。f + {} 是配套固定搭配使用的,这里的{}表示占位符,需要填充具体的值。正确的代码应该是:
def D_salary(self, daily_salary):
    print(f"工资: {float(self.work_days) * float(daily_salary)}")
注意:在parttime_staff类的构造函数和D_salary方法中,daily_salary都不需要再传入参数,因为它们已经在构造函数中被赋值了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-27 16:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表