from abc import ABCMeta, abstractmethod # abstractmethod 抽象方法 class Emloyee(object, metaclass=ABCMeta): # abc模块 不能创建对象 def __init__(self, name): ''' 初始化方法 :param name: 员工姓名 ''' self._name = name @property def name(self): return self._name @abstractmethod # abstractmethod包装器 子类必须重写 def get_salary(self): ''' 获得月薪 :return: 获得月薪 ''' pass class Manager(Emloyee): """部门经理 """ def get_salary(self): return 15000 class Programmer(Emloyee): def __init__(self, name): super(Programmer, self).__init__(name) self._working_our = 0 @property def working_hour(self): ''' 员工工作时间 :return: 工程师本月工作时间 ''' return self._working_our @working_hour.setter def working_hour(self, working_hour=0): self._working_our = working_hour if working_hour > 0 else 0 def get_salary(self): return 150 * self._working_our class Salesman(Emloyee): def __init__(self, name, sales=0): super(Salesman, self).__init__(name) self._sales = sales @property def sales(self): ''' 员工本月销售额 :return: 销售员本月销售额 ''' return self._sales @sales.setter def sales(self,sales): self._sales = sales if sales > 0 else 0 def get_salary(self): return 1200 + self._sales * 0.05 def main(): emps = [Manager('刘备'), Programmer('诸葛亮'), Manager('曹操'), Salesman('曹丕'), Salesman('吕布'), Programmer('关羽')] for emp in emps: if isinstance(emp,Programmer): # isinstance() 函数来判断一个对象是否是一个已知的类型 emp.working_hour = int(input('请输入%s本月工作时间:' % emp.name)) elif isinstance(emp,Salesman): emp.sales = int(input('请输入%s本月销售额:' % emp.name)) # 同样是接收get_salary这个消息 但是不同的员工表现出了不同的行为 # 因为三个子类都重写了get_salary方法 所以这个方法会表现出多态行为 print('%s本月工资为:¥%.2f元'%(emp.name, emp.get_salary())) if __name__ == '__main__': main()
class Account(object): def __init__(self, * , card_number, owner, balance=0): self._card_number = card_number self._owner = owner self._balance = balance @property def card_number(self): return self._card_number @property def balance(self): return self._balance def transfer(self, other, money): if self.withdraw(money): other.deposit(money) return True return False def deposit(self, money): if money > 0 and money % 100 == 0: self._balance += money return True return False def withdraw(self, money): if 0 < money < self._balance and money % 100 == 0: self._balance -= money return True return False def main(): a = Account(card_number='123',owner='xl') print(a.balance) a.deposit(2000) a.withdraw(1000) print(a.balance) if a.withdraw(1500): print(a.balance) else: print('余额不足!') b = Account(card_number= 321, owner='yqx') if a.transfer(b,500): print(b.balance) else: print('余额不足!') # print(b.transfer(123)) # print(b.draw(123)) # print(b.save(123)) if __name__ == '__main__': main()
如对本文有疑问, 点击进行留言回复!!
Windows10 下Anaconda环境Python3.7 安装dlib库最简单方法 无需cmake
leetcode 622. design-circular-queue 设计循环队列 python3
网友评论