码迷,mamicode.com
首页 > 编程语言 > 详细

PYTHON3中 类的继承

时间:2018-04-12 17:10:39      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:img   python类   定义   sub   隔离   类之间的关系   派生类   默认   elf   

继承

1:什么是继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹。

新建的类成为子类或者派生类。

父类又可以成为基类或者超类。

子类会遗传父类的属性。

2:为什么要用继承

减少代码冗余(也就是重复写代码)。

3:怎么用继承:

我们定义两个类;
class parenclass1:
        pass

class parenclass2:
        pass


在定义两个类:

class subclass1:

    pass

class subclass2:
    pass

我想让 :
class parenclass1:      作为    class  subclass1:     的父类。   
    pass                            pass


应该这样用: class subclass1( parenclass1): 这就表示subclass1是子类,parenclass 是subclass1 的父类 pass
两个父类的话怎么表达呢?如下:
class subclass2(parenclass1,parenclass2): pass 这就表示subclass2的父类是parenclass1,parenclass2 这两个

 

想要查看子类的父类 应该怎样查看呢: 用__bases__  如下:

class ParentClass1:
    pass

class ParentClass2:
    pass

class Subclass1(ParentClass1):
    pass

class Subclass2(ParentClass1,ParentClass2):
    pass


print(Subclass1.__bases__) 
#打印结果:(<class __main__.ParentClass1>,)

print(Subclass2.__bases__)
#打印结果:
(<class __main__.ParentClass1>, 
 <class __main__.ParentClass2>)

经典类与新式类

1、只有在python2中才分新式类和经典类,python3中统一都是新式类
2、在python2中 没有显示继承的object类的类,以及该类的子类都是经典类
3、在python2中,显示的声明继承object的类,以及该类的子类都是新式类
4、在python3中,无论是否继承object,都默认 继承object,即python3中所有类均为新式类

至于经典类 与新式类的区别,后面会有讨论。

提示:如果没有指定基类, python的类会默认继承object类, object是所有python类的基类。

 

二、继承与抽象

继承描述的是子类与父类之间的关系,是一种什么的关系呢? 要找出这种关系, 必须先抽象在继承。

抽象即抽取类似或者说比较像的部分。

抽象分成两个层次:

1.将奥巴马和梅西这俩对象比较像的部分抽取成类; 

2.将人,猪,狗这三个类比较像的部分抽取成父类。

抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)

技术分享图片

 

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象合格过程, 才能通过继承的方式去表达抽象的结构。

抽象只是分析和设计的过程,一个动作或者说一种技巧,通过抽象可以得到类

技术分享图片

 

 例如:我们写一个老男孩的老师与学生的类,若是不涉及到继承的话  我们正常是这样写

class OldboyTeacher:
    school = oldboy

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def change_score(self):
        print(teacher %s is changing score  %self.name)

class Oldboystudent:
    school = ‘oldboy’
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def choose(self):
        print(student %s choose course %self.name)

tea1 = OldboyTeacher(egon, 18, male) #OldboyTeacher.__init__(...)
stu1=Oldboystudent(alex,73,female)

print(tea1.name,tea1.age,tea1.sex) # egon 18 male

print(stu1.name) #alex

但是我们经过分析 发现里面里面有许多重复代码, 这时我们可以用到类的继承来写了。如下:

class OldboyPeople:
    school =oldboy

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class Oldboyteacher(OldboyPeople):
    def change_score(self):
        print(teacher %s is changing score  %self.name)
class Oldboystudent(OldboyPeople): def choose(self): print(student %s choose course%self.name) tea1 = Oldboyteacher(egon, 18, male) stu1=Oldboystudent(alex,73,female)
print(tea1.name,tea1.age,tea1.sex)#egon
18 male print(stu1.name) #alex

 

 

 

 

 

 

 

 

 

 

PYTHON3中 类的继承

标签:img   python类   定义   sub   隔离   类之间的关系   派生类   默认   elf   

原文地址:https://www.cnblogs.com/lx3822/p/8808845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!