python 的继承学习

原创 2016年08月29日 23:58:48
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 my 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

class Student(SchoolMember):
    '''Represents a student.'''
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print '(Initialized Student: %s)' % self.name

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

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)

print # prints a blank line

members = [t, s]
for member in members:
    member.tell() # works for both Teachers and Students

为了使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。然后,我们注意到基本类的__init__方法专门使用self变量调用,这样我们就可以初始化对象的基本类部分。这一点十分重要——Python不会自动调用基本类的constructor,你得亲自专门调用它。

我们还观察到我们在方法调用之前加上类名称前缀,然后把self变量及其他参数传递给它。

注意,在我们使用SchoolMember类的tell方法的时候,我们把TeacherStudent的实例仅仅作为SchoolMember的实例。

另外,在这个例子中,我们调用了子类型的tell方法,而不是SchoolMember类的tell方法。可以这样来理解,Python总是首先查找对应类型的方法,在这个例子中就是如此。如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的。

一个术语的注释——如果在继承元组中列了一个以上的类,那么它就被称作 多重继承 。


Python学习(类的属性、继承、覆盖等详解)

Tips:如果是从基础部分一路跟着过来的朋友,需要告诉你们的是我偷偷吧编程工具PyCharm装上了,今天算是进入面向对象编程环节。本人使用的编程工具是PyCharm,未安装的可以先去官网下载安装。下面...
  • qq_21972583
  • qq_21972583
  • 2017年08月23日 14:57
  • 603

Python:继承Thread实现多线程

通过继承Thread来实现多线程可以提高对线程任务的个性化定制,具体如下 from threading import Thread class myThread(Thread): #每创建一个线...
  • ksws0393238aa
  • ksws0393238aa
  • 2014年03月02日 13:08
  • 2404

python中继承一个类

如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self,...
  • GoodLuckAC
  • GoodLuckAC
  • 2016年11月09日 16:04
  • 3610

python中继承的作用以及多重继承的执行顺序

1.继承只会继承父类的方法,不能继承父类的变量 2.要想继承父类的变量,需要执行父类的__init__(self)方法 3.下划线开头的变量或方法,会被认为是受保护的,不能直接点出来,但如果强制打...
  • aydfzmb
  • aydfzmb
  • 2016年11月22日 16:37
  • 335

python 普通继承方式和super继承方式

普通继承: #!/usr/bin/env python3       #-*- coding:utf-8 -*-       class FooParent(o...
  • u010069176
  • u010069176
  • 2016年06月22日 14:56
  • 1934

Python 异常继承体系

Python 异常继承体系(version python3.4) The class hierarchy for built-in exceptions is: BaseException ...
  • gaoxin12345679
  • gaoxin12345679
  • 2015年07月23日 09:55
  • 395

python的继承体系mro详解

本文为阅读python官方文档之mro详解,所得的一些笔记。 文档地址:https://www.python.org/download/releases/2.3/mro/ python在2...
  • u013628804
  • u013628804
  • 2017年04月16日 22:28
  • 381

python 对象的魔力--多态、封装和继承

简单介绍下这几个名词的意思。 多态(Polymorphism):意味着可以对不同类的对象使用相同的操作。 封装(Encapsulation): 即对外部世界隐藏对象的工作细节。 继承(Inher...
  • u011510825
  • u011510825
  • 2016年02月23日 21:57
  • 804

python类的继承的两种方式

#-*- coding:utf-8 -*- class Animal(object): """docstring for Animal""" def __init__(self, na...
  • u012193330
  • u012193330
  • 2015年07月11日 21:14
  • 2494

Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

测试环境:win7 64位Python版本:Python 3.3.5代码实践:1、在子类中通过“类名”调用父类的方法class FatherA: def __init__(self): ...
  • neuldp
  • neuldp
  • 2016年10月09日 22:40
  • 1034
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 的继承学习
举报原因:
原因补充:

(最多只允许输入30个字)