美文网首页
Python面向对象编程

Python面向对象编程

作者: 九章9405 | 来源:发表于2021-05-07 22:45 被阅读0次
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# @Author : 九章
# @File : class_study.py
# @Software: PyCharm
# @Time : 2021/4/10 23:23
class Employee:
    """
    定义员工类Employee,设置员工工资涨幅为1.05
    """
    raise_rate = 1.05

    def __init__(self, first, last, pay):
        """
        初始化属性
        :param first:姓
        :param last:名
        :param pay:工资
        :param email:邮箱
        """
        self.first = first
        self.last = last
        self.pay = pay
        # 不推荐这种方式生成邮箱地址,因为用户名改了以后,邮箱不会变
        #self.email = self.first + "_" + self.last + "@gmail.com"

    @property
    def email(self):
        """
        最好是使用email方法去生成员工的邮箱,用户名改了以后,邮箱会跟着变
        """
        return self.first + "_" + self.last + "@gmail.com"

    @property
    def fullname(self):
        """
        显示全名:property是一种属性装饰器,正常使用是Employee.fullname()
        加了装饰器就不需要加括号
        """
        return "{0} {1}".format(self.first, self.last)

    @fullname.setter
    def fullname(self,name):
        """
        全名分拆成名和姓,然后再赋值给 self.first 和 self.last
        """
        self.first,self.last = name.split(' ')

    def aply_raise(self):
        """
        获取加倍后的工资
        """
        self.pay = int(self.pay * self.raise_rate)

    def __repr__(self):
        return "Employee({0},{1},{2})".format(self.first, self.last, self.pay)

    def __add__(self, other):
        """
        计算两个员工工资之和
        """
        return self.pay + other.pay

    @classmethod
    def reset_raise_rate(cls, rate):
        """
        类方法:可直接修改该类和子类的属性,必须含有cls参数
        """
        cls.raise_rate = rate

    @staticmethod
    def say(word):
        """
        静态方法:不能含有self参数,可理解成一种函数
        """
        return print(word)


class Developer(Employee):
    raise_rate = 1.1

    def __init__(self, first, last, pay, lang):
        super(Developer, self).__init__(first, last, pay)
        self.lang = lang


class Manager(Employee):
    def __init__(self, first, last, pay, employees=None):
        super().__init__(first, last, pay)
        if employees == None:
            self.employees = []
        else:
            self.employees = employees

    def add_emp(self, emp):
        if emp not in self.employees:
            self.employees.append(emp)

    def remove_emp(self, emp):
        if emp in self.employees:
            self.employees.remove(emp)

    def show_emp(self):
        """
        显示管理者下的所有开发者
        """
        for emp in self.employees:
            print("-->", emp.fullname)

相关文章

网友评论

      本文标题:Python面向对象编程

      本文链接:https://www.haomeiwen.com/subject/ykcydltx.html