python中property修饰器存在的意义和作用,问题描述详见问题,请前辈们通过实例分析讲解!

1.问题描述:
学了property修饰器后,并不十分清楚property的作用和意义,在编写代码时,感觉好像可用可不用,请教大家通过实际案例分析一下property的作用,即使用property修饰的属性和不适用property修饰的属性应用区别???

2.贴上代码:
代码主题:
某公司有三种类型的员工 分别是部门经理、程序员和销售员
需要设计一个工资结算系统 根据提供的员工信息来计算月薪
部门经理的月薪是每月固定15000元
程序员的月薪按本月工作时间计算 每小时150元
销售员的月薪是1200元的底薪加上销售额5%的提成

注意:代码示例1是没有使用property修饰的代码
代码2是部分使用property修饰的代码
代码3是标准代码
请前辈分析:
代码示例1:

from abc import ABCMeta,abstractmethod

class Worker(object,metaclass=ABCMeta):
    #绑定员工的属性,姓名
    def __init__(self,name):
        self._name = name

    @property
    def name(self):
        return self._name

    #定义抽象方法salary用来多态方法
    @abstractmethod
    def salary(self):
        pass

class Department_manager(Worker):
    #默认继承Worker属性:姓名

    #定义方法salary用来计算department_manager的薪水
    def salary(self):
        print('%s 本月的薪水为: 15000 元'% self._name)

class Programmer(Worker):

    def salary(self):
        work_hours = int(input('请输入%s 本月有效工作时间: '% self._name))
        s = work_hours * 150
        print('%s 本月的薪水为: %d 元'% (self._name,s))

class Salesman(Worker):

    def salary(self):
        sale = float(input('请输入%s 本月实际销售额: '% self._name))
        s = 1200 + sale * 0.05
        print('%s 本月的薪水为:%d 元'% (self._name,s))

def main():
    workers = [
    Department_manager('张飞'),Department_manager('B'),
    Programmer('C'),Programmer('D'),
    Salesman('E'),Salesman('F')]

    for worker in workers:
        worker.salary()

if __name__ == '__main__':
    main()

代码示例2:

from abc import ABCMeta,abstractmethod

class Worker(object,metaclass=ABCMeta):
    #绑定员工的属性,姓名
    def __init__(self,name):
        self._name = name

    @property
    def name(self):
        return self._name

    #定义抽象方法salary用来多态方法
    @abstractmethod
    def salary(self):
        pass

class Department_manager(Worker):
    #默认继承Worker属性:姓名

    #定义方法salary用来计算department_manager的薪水
    def salary(self):
        print('%s 本月的薪水为: 15000 元'% self._name)

class Programmer(Worker):
    def __init__(self,name,work_hours=0):
        super().__init__(name)
        self._work_hour = work_hours

    @property
    def work_hours(self):
        return self._work_hours

    @work_hours.setter
    def work_hours(self,work_hours):
        self._work_hours = work_hours

    def salary(self):
        work_hours = int(input('请输入%s 本月有效工作时间: '% self._name))
        s = work_hours * 150
        print('%s 本月的薪水为: %d 元'% (self._name,s))

class Salesman(Worker):

    def salary(self):
        sale = float(input('请输入%s 本月实际销售额: '% self._name))
        s = 1200 + sale * 0.05
        print('%s 本月的薪水为:%d 元'% (self._name,s))

def main():
    workers = [
    Department_manager('张飞'),Department_manager('B'),
    Programmer('C'),Programmer('D'),
    Salesman('E'),Salesman('F')]

    for worker in workers:
        worker.salary()

if __name__ == '__main__':
    main()

代码示例3:

from abc import ABCMeta, abstractmethod


class Employee(object, metaclass=ABCMeta):
    """员工"""

    def __init__(self, name):
        """
        初始化方法

        :param name: 姓名
        """
        self._name = name

    @property
    def name(self):
        return self._name

    @abstractmethod
    def get_salary(self):
        """
        获得月薪

        :return: 月薪
        """
        pass


class Manager(Employee):
    """部门经理"""

    def get_salary(self):
        return 15000.0


class Programmer(Employee):
    """程序员"""

    def __init__(self, name, working_hour=0):
        super().__init__(name)
        self._working_hour = working_hour

    @property
    def working_hour(self):
        return self._working_hour

    @working_hour.setter
    def working_hour(self, working_hour):
        self._working_hour = working_hour if working_hour > 0 else 0

    def get_salary(self):
        return 150.0 * self._working_hour


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 = [
        Manager('刘备'), Programmer('诸葛亮'),
        Manager('曹操'), Salesman('荀彧'),
        Salesman('吕布'), Programmer('张辽'),
        Programmer('赵云')
    ]
    for emp in emps:
        if isinstance(emp, Programmer):
            emp.working_hour = int(input('请输入%s本月工作时间: ' % emp.name))
        elif isinstance(emp, Salesman):
            emp.sales = float(input('请输入%s本月销售额: ' % emp.name))
        # 同样是接收get_salary这个消息但是不同的员工表现出了不同的行为(多态)
        print('%s本月工资为: ¥%s元' %
              (emp.name, emp.get_salary()))


if __name__ == '__main__':
    main()
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^