#!/bin/env python
#!coding=utf-8
class SchoolMember(object):     ##定义一个父类
    def __init__(self,name,gender,nationality):
        self.name=name
        self.gender=gender
        self.nation=nationality
                                ##类中包含三个变量
    def tell(self):             ##一个方法
        print "Hi,my name is %s,I am from %s" %(self.name,self.nation)

class Student(SchoolMember):   ##定义子类student
    def __init__(self,Name,Class,Gender,Score,Nation='CN'):
        SchoolMember.__init__(self,Name,Gender,Nation)  ##将父类的三个变量导入子类
        self.Class=Class
        self.Gender=Gender

    def payTuition(self,amount):
        if amount < 6999:
            print "GET OFF"
        else:
            print "Welcome!"

class Teacher(SchoolMember):    ##定义另一个子类teacher
    def __init__(self,name,gender,salary,subject,nation='Fr'):
        #SchoolMember.__init__(self,name,gender,nation)
        self.salary=salary     ##这里没有用student类的方式将父类的变量导入子类,而是一个一个手动赋予的
        self.subject=subject
        self.name=name
        self.gender=gender
        self.nation=nation

    def show(self):
        print "Hi,I am  teaching %s,my salary is %s" %(self.name,self.salary)

s1=Student('zhang','Python','man','99')  ##s1赋值4个
s1.tell()      ##调用父类的方法tell
s1.payTuition(7000)  ##调用自己本身的类方法

s2=Student('dang','Python','woman','100') ##s2
s2.tell()       ##调用父类的子方法tell
s2.payTuition(8000)
s2.age=21       ##给s2新添一个变量age
print s2.age


t=Teacher('ALex','Woman','9000','Linux')  
t.tell()
t.show()

另外还要介绍两个python中自带的函数setattr与getattr

setattr:
语法:
    setattr(Class.SchoolMember,'age',18) ##给类SchoolMember(父类)添加变量age,默认值为18
    setattr(Class.Student,'age',20)   ##给类Student(子类)添加变量age,默认值为20
    值得一提的是,当调用子类Student的age是,输出为20,因为子类会覆盖父类的值

getattr

当我们需要按照某个顺序执行类中的方法时需要用到getattr
v=['tell','tell1','tell2']
假设我们想执行tell方法,但又不能直接输入。此时即可用到getattr
t=Teacher('ALex','Woman','9000','Linux')
getattr(t,v[0])()

即可调用出tell方法!
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐