Python面向对象的典型例子

学校人事管理系统


前言

该系统是裘宗燕编写的《数据结构与算法:Python语言描述》中的一个关于类使用的例子,没有使用到数据库。我觉得这个例子非常好,对基于Python的面向对象的理解有帮助,所以对代码做了点微小的改动,在此分享一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、类设计

我们大致上将学校中的人分为三个类别Person,Student和Staff。
Person是基本人员,Student是学生,Staff是教职员工。
他们都具有姓名,性别,出生年月等属性,而学生有成绩、学号等特殊属性,教职员工有工资、入职时间等特殊属性,所以可以将Person作为一个基类,Student和Staff去继承这个基类。
另外,为了防止存入不符要求的信息,我们可以自定义异常类来处理这个问题。


二、实际代码

1.项目目录

先创建一个python package,叫做学校人事管理系统的类设计。然后在此package下新建py文件,叫做异常类.py
后面再创建公共人员类.py,学生类.py教职工类.py
在这里插入图片描述


2.异常类

# 自定义异常类
class PersonTypeError(TypeError):
    pass


class PersonValueError(ValueError):
    pass

用来处理输入信息的类型不对或数值异常。


3.公共人员类

import datetime
from 异常类 import PersonTypeError, PersonValueError


class Person:
    _num = 0

    def __init__(self, name, sex, birthday, ident):
        """
        实例对象的基础信息
        :param name: 姓名
        :param sex: 性别
        :param birthday: 出生年月
        :param ident: 编号
        """
        if not (isinstance(name, str) and sex in ('男', '女')):
            # 检查姓名是否是字符串,性别是男还是女
            raise PersonValueError(name, sex)
        try:
            birth = datetime.date(*birthday)
        except:
            raise PersonValueError('wrong date:', birthday)
        self._name = name
        self._sex = sex
        self._birthday = birth
        self._id = ident
        # 实例计数
        Person._num += 1

    def id(self):
        return self._id

    def name(self):
        return self._name

    def sex(self):
        return self._sex

    def birthday(self):
        return self._birthday

    def age(self):
        # 返回年龄
        return datetime.date.today().year - self._birthday.year

    def set_name(self, name):
        """
        修改名字
        :param name: 新名字
        :return: void
        """
        if not isinstance(name, str):
            raise PersonValueError('name:', name)
        self._name = name

    def __lt__(self, other):
        """
        根据编号对人物对象排序
        :param other: 对象
        :return: 对象的id
        """
        if not isinstance(other, Person):
            raise PersonTypeError(Person)
        return self._id < other._id

    @classmethod
    def num(cls):
        # 类方法,用来获得类中人员的计数值
        return Person._num

    def __str__(self):
        # 提供对象的基本信息
        return ' '.join
  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值