头歌 python 面向对象程序设计2-银行职员类的定义和继承

第1关:定义银行员工类BankEmployee

任务描述
本关任务:编写银行员工类BankEmployee,要求:
1.银行员工类的属性包括姓名name,工号num,工资salary
2.姓名name和工号num设置为私有属性,并将salay设置为默认参数3000

class BankEmployee:
    # 初始化构造函数,设置私有属性name和num,并设置工资salary
    def __init__(self, name, num, salary=3000):
        self.__name = name      # 私有属性
        self.__num = num        # 私有属性
        self.salary = salary    # 默认工资为3000

    # 定义方法获取工资并输出格式
    def get_salary(self):
        print(f'{self.__name}领到这个月工资{self.salary}')

def main():
    name = input()  # 输入员工姓名
    num = input()   # 输入员工工号
    bankemployee = BankEmployee(name, num)  # 创建BankEmployee对象
    bankemployee.get_salary()  # 输出员工工资信息

if __name__ == "__main__":
    main()

第2关:定义银行柜员类BankTeller

任务描述
本关任务:编写一个银行柜员类BankTeller,继承BankEmployee类,要求:
1.完善BankEmployee类,对私有属性name和num添加set方法和get方法以实现对私有属性的设置和获取
2.对工号的合法性进行检验,要求工号以字母s开头,如s678是合法工号,678不是合法工号
3.继承BankEmployee类,定义银行柜员类BankTeller类,其name属性和num属性和父类BankEmployee类相同,属性salary默认参数为2000

class BankEmployee:
    def __init__(self, name="", num="", salary=2000):
        self.__name = name
        self.__num = num
        self.salary = salary

    def get_salary(self):  # 定义领工资方法get_salary()
        print(f"{self.__name}领到这个月工资{self.salary}")

    # 添加对name和num的set/get方法
    def set_name(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_num(self, num):
        if num.startswith('s'):
            self.__num = num
        else:
            print("工号以s开头")
            self.__num = None  # 设置为 None 以表示无效工号

    def get_num(self):
        return self.__num


class BankTeller(BankEmployee):
    def __init__(self, name="", num=""):
        super().__init__(name, num, salary=2000)


def main():
    bankteller = BankTeller()
    name = input()
    num = input()
    
    bankteller.set_name(name)  # 设置柜员姓名
    bankteller.set_num(num)  # 设置工号

    # 输出工资
    bankteller.get_salary()

    # 再次检查工号并输出
    if bankteller.get_num() is None:
        print("工号以s开头")  # 工号无效时输出
    print(bankteller.get_name(), bankteller.get_num())  # 姓名和工号的输出


if __name__ == "__main__":
    main()

第3关:定义经理类BankManager

任务描述
本关任务:编写一个经理类BankManage,要求:
1.继承BankEmployee类的构造函数
2.将BankEmployee类的属性name,num和salary设置为插槽
3.定义经理类BankManager类,继承BankEmployee类,并多一个提成commission私有属性

class BankEmployee:
    __slots__ = ['__name', '__num', 'salary']  # 设置插槽

    def __init__(self, name="", num="", salary=3000):
        self.__name = name
        self.__num = num
        self.salary = salary

    def get_salary(self):  # 定义领工资方法get_salary()
        print(f"{self.__name}领到这个月工资{self.salary}")

    def set_name(self, name):
        self.__name = name

    def get_name(self):
        return self.__name


    def set_num(self, num):
        if num.startswith("s"):
            self.__num = num
        else:
            print("工号以s开头")
            self.__num = None  # 如果工号不合法,则设置为None

    def get_num(self):
        return self.__num


# 提成
class BankManager(BankEmployee):
    def __init__(self, name="", num="", salary=3000, commission=0):
        super().__init__(name, num, salary)  # 调用父类构造函数
        self.__commission = commission  # 设置提成

    def get_commission(self):  # 定义获取提成的方法
        print(f"{self.get_name()}领到这个月提成{self.__commission}")


def main():
    name = input()
    num = input()
    salary = int(input())
    commission = int(input())
    bankmanager = BankManager(name, num, salary, commission)
    bankmanager.get_commission()

if __name__ == "__main__":
    main()

你可能感兴趣的:(python,开发语言)