Python进阶笔记(5)_ 继承

类的继承指的是在已有的类上增加新的类。比如,假设你想要写一个程序来记录学校之中的教师和学生情况。他们有一些共同属性,比如姓名、年龄和地址。他们也有专有的属性,比如教师的薪水、课程和假期,学生的学号和成绩。也就是说姓名、年龄和地址为共同的类,而薪水、课程为教师独有的类,学号和成绩为学生独有的类。那么就可以先建立一个共同的类SchoolMember,包含姓名、年龄和地址属性,然后为老师建立一个 Teacher 类,包含薪水、课程等属性,为学生建立一个 Student 类,包含学号和成绩等属性。Teacher 和 student 都是从 SchoolMember 中继承出来的,这样二者也就包含了 姓名、年龄和地址等属性。

具体可以先看看下例:

# Filename : inherit_test.py

class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age  = age
        print '(Initialized SchoolMember:%s)' %self.name

    def tell(self):
        '''Tell the details.'''
        print 'Name:"%s", Age:"%s"' %(self.name, self.age)

class Teacher(SchoolMember):
    '''Represents a teacher'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self,name,age)
        self.salary = salary
        print '(Initialized Teacher: %s)' %self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Salary: "%d"' %self.salary
        print # prints a blank line
 
class Student(SchoolMember):
    '''Represents a student'''
    def __init__(self, name, age, marks, score):
        SchoolMember.__init__(self,name,age)
        self.marks = marks
        self.score = score
        print '(Initialized Student: %s)' %self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Marks:"%d", Score:"%d"' %(self.marks,self.score)


teachers = Teacher('Pro. Phoenix', 33, 50000)
students = Student('Tree', 23, 2120130992, 98)

print # prints a blank line

members = [teachers, students]
for member in members:
    member.tell()

输出为


这里,我们继承的书写方式是 

SchoolMember.__init__(self,name,age)

还有一种方式是

super(Teacher, self).__init__(name, gender)

判断类型

可以通过 函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。

例如我们对上例的基础上再做如下判断:

peopple  = SchoolMember('Someone',30)

print isinstance(peopple,SchoolMember)
print isinstance(peopple,Teacher)
print isinstance(peopple,Student)

print isinstance(teachers,SchoolMember)
print isinstance(teachers,Teacher)
print isinstance(teachers,Student)

print isinstance(teachers, object)

输出为

True
False
False


True
True
False


True

多态和多重继承

第一个例子中,有一个 tell()在父类和子类里都出现了。这种表达称为多态。一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。

class Person(object):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass

class SkillMixin(object):
    pass

class BasketballMixin(SkillMixin):
    def skill(self):
        return 'basketball'

class FootballMixin(SkillMixin):
    def skill(self):
        return 'football'

class BStudent(Student, BasketballMixin):
    pass

class FTeacher(Teacher, FootballMixin):
    pass

s = BStudent()
print s.skill()

t = FTeacher()
print t.skill()

上例多重继承可以用下图表示





















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值