python小白求助~

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