from abc import ABCMeta, abstractmethod
class Employee(object, metaclass=ABCMeta):
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@abstractmethod
def get_salary(self):
pass
class Salesman(Employee):
def __init__(self, name, sales=0):
super().__init__(name)
self._sales = sales
@property
def sales(self):
return self._sales
@sales.setter
def sales(self, sales):
self._sales = sales if sales > 0 else 0
def get_salary(self):
return 1200.0 + self._sales * 0.05
def main():
emps = Salesman('aa')
emps.sales = int(input('请输入销售额:'))
print(emps.get_salary())
if __name__ == '__main__':
main()
为什么把self._name = name 改为self.name = name; self._sales = sales 改为 self.sales = sales 后就会报错呢?
class Employee(object):
def __init__(self, name):
self.name = name
@property
def name1(self):
return self.name
def get_salary(self):
pass
class Salesman(Employee):
def __init__(self, name, sales=0):
super().__init__(name)
self.sales = sales
@property
def sales(self):
return self._sales
@sales.setter
def sales(self, sales):
self._sales = sales if sales > 0 else 0
def get_salary(self):
return 1200.0 + self._sales * 0.05
def main():
emps = Salesman('aa')
emps.sales = int(input('请输入销售额:'))
print(emps.get_salary())
if __name__ == '__main__':
main()
你的Employee有个方法叫name,把方法名改一下就好了
插个眼,等大佬来解答
@property 这个装饰器方法的作用,就是为了保护属性不被修改的,可以去了解下@property 的作用
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632