python之繼承

代碼上傳至github
此代碼已上傳至github,喜歡的給個star噢。嘻嘻~~
python3.6版本
在這裏插入圖片描述

Person.py

import datetime
class Person:
    AllCount = 0
    def __init__(self,number,name,sex,birthday):
        self.number = number
        self.name = name
        self.birthday = birthday
        self.sex = sex
        Person.AllCount += 1

    @property
    def age(self):
        return datetime.date.today().year - self.birthday.year
    @age.setter
    def age(self,value):
        return AttributeError("禁止賦值年齡")

    @age.deleter
    def age(self):
        return AttributeError("年齡不能刪除")

    def __repr__(self):
        return "<個人:{} at 0x{}>".format(self.number,id(self))

    def __str__(self):
        return "編號:{},姓名:{},性別:{}".format(self.number,self.name,self.sex)

    def __del__(self):
        Person.AllCount -= 1

Department.py

class Department:
    def __init__(self,depnumber,adminstrate,louceng):
        self.depnumber = depnumber
        self.adminstrate = adminstrate
        self.louceng = louceng

    def __str__(self):
        return "編號:{},管理者:{},樓層:{}".format(self.depnumber,self.adminstrate,self.louceng)

Teacher.py

from  OO.Person import Person as Person
from OO.Department import Department as Department

class Teacher(Person):
    TeacherCount = 0
    def __init__(self, number,name,sex,birthday,depatment:Department, salay):
        super().__init__(number,name,sex,birthday)
        self.depatment = depatment
        self.salay = salay
        Teacher.TeacherCount += 1

    def give_raise(self, percent, bonus=.0):
        self.salay = self.salay * (1 + percent) + bonus

    def __del__(self):
        Teacher.TeacherCount -= 1

    def __str__(self):
        return "編號:{},姓名:{},性別:{},部門:{}".format(self.number, self.name, self.sex,self.depatment)

Student.py

from  OO.Person import Person as p

class Student(p):
    StudentCount = 0
    def __init__(self,number,name,sex,birthday,grade):
        super().__init__(number,name,sex,birthday)
        #Person.__init__(self,number,name,sex,birthday)  或者可以這樣寫
        self.grade = grade 
        Student.StudentCount += 1



    def __del__(self):
        Student.StudentCount -= 1

    def __str__(self):
        return "編號:{},姓名:{},性別:{}".format(self.number,self.name,self.sex)

main.py

import datetime
#注意包的導入格式
from OO.Person import Person as Person
from OO.Teacher import Teacher as Teacher
from OO.Student import  Student as Student
from OO.Department import Department as Department


if __name__ == '__main__':

    per = Person ("1","wu","女",datetime.date(1995,5,10))
    dep = Department("x","wi",6)
    tea = Teacher("1","wu","女",datetime.date(1995,5,10),dep,5000)

    stu = Student("a","li","男",datetime.date(1998,2,15),90)
    stu2 = Student("b", "Zhou", "女", datetime.date(1998, 2, 19), 80)  #必須是stu2,stu 是佔原來的位置,使得stu.StudentCount不會加1

    #感受下兩者區別,因爲age使用了裝飾器property且 @age.deleter進行修飾,所以age不能刪除。同時爲age的修改的函數也進行了修飾
    # del (per.age)
    # del (per.sex)
    # print(per.age)
    # print(per.sex)
    #
    #
    # print(per)  #調用Person.py裏的__str()__函數
    # #腳本中直接寫 per   調用__repr__(self)函數

    # print(tea.depatment.depnumber)  #獲取教師所在的部門編號

    print(per.AllCount)
    print(tea.TeacherCount)
    print(stu.StudentCount)

其中
super() 函數是用於調用父類(超類)的一個方法。
super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重複調用(鑽石繼承)等種種問題。

發佈了37 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章