python 面對對象 類(繼承, 多態)

繼承,繼承其它實例化樣本的屬性和方法,須要在聲明裏從新定義和使用python

class School(object):
    def __init__(self, name, addr):
        self.name = name
        self.addr = addr
        self.student = []  # 用於進行學生類的存儲
        self.teacher = []  # 用於進行老師類的存儲
    def enroll(self, stu_obj):
        print('招錄進來學生%s'%stu_obj.name)
        self.student.append(stu_obj) # 將學生類進行添加
    def hire(self, staff_obj):
        print('招募老師%s'%staff_obj.name)
        self.teacher.append(staff_obj) # 將老師類進行添加

class Schoolmember(object):  # 建立學校成員的父類 
    def __init__(self, name, age, sex): # 定義初始變量
        self.name = name  # 定義名字
        self.age = age # 定義年齡
        self.sex = sex  # 定義性別
    def teach(self):  # 定義父類屬性
        pass

class Teacher(Schoolmember): # 定義老師屬性,繼承父類
    def __init__(self, name, age, sex, salary, course): # 變量聲明
        super(Teacher, self).__init__(name, age, sex) # 變量繼承
        self.salary = salary
        self.course = course
    def tell(self):
        print('''
        ---info---%s
        name %s 
        age %s 
        sex %s 
        salary %s 
        course %s 
        '''%(self.name, self.name, self.age, self.sex, self.salary, self.course))
    def teach(self):
        print('%s is teaching'%self.name)

class Student(Schoolmember):
    def __init__(self, name, age, sex, stu_id, grade):
       super(Student, self).__init__(name, age, sex)
       self.stu_id = stu_id
       self.grade = grade

    def tell(self):
        print('''
           ---info---%s
           name %s 
           age %s 
           sex %s 
           stu_id %s 
           grade %s 
           ''' % (self.name, self.name, self.age, self.sex, self.stu_id, self.grade))
    def paid_tution(self, money):
        print('%s has paid tution for $%s'%(self.name, money))


# 建立實例
school = School('oldboy', '沙河')

s1 = Student('aaa', 22, 'M', '0001', 'python')
s2 = Student('bbb', 23, 'F', '0002', 'linux')

t1 = Teacher('ccc', 333, 'W', 10000, 'python')
t2 = Teacher('ddd', 444, 'F', 20000, 'linux')

school.enroll(s1)
school.hire(t1)
school.teacher[0].teach()
for stu in school.student:
    stu.paid_tution(20000)

多態: 表示在父類裏定義一個函數,在子類裏均可以使用linux

class Animal(object):
    def __init__(self, name): # 初始化
        self.name = name 
    @staticmethod  # 靜態變量裝飾器, 這樣不須要輸入self變量
    def animal_talk(obj):
        obj.talk()

class dog(Animal): # 定義dog類, 繼承Animal 
    def __init__(self, name):
        super(dog, self).__init__(name)

    def talk(self): # 定義函數屬性
        print('wowo')


class cat(Animal):
    def __init__(self, name):
        super(cat, self).__init__(name)

    def talk(self):
        print('Meow')

c = cat('aaa') # 實例化
d = dog('bbb')
Animal.animal_talk(c) # 調用Animal裏面的屬性
Animal.animal_talk(d)
相關文章
相關標籤/搜索