python-类的继承

1.简单继承

class F1:  #父类,或者基类
    def show(self):
        print(‘F1.show‘)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类
    def bar(self):
        print(‘bar‘)

obj = F2()
obj.show()
obj.bar()

out:

F1.show
bar

2.父类和子类有相同的方法,优先执行子类中的方法

class F1:  #父类,或者基类
    def show(self):
        print(‘F1.show‘)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类

    def bar(self):
        print(‘bar‘)
    def show(self):   #子类优先级高
        print(‘F2.show‘)

obj = F2()
obj.show()
obj.bar()

out:

F2.show
bar

3.子类中封装数据,父类中也可以访问

class F1:  #父类,或者基类
    def show(self):
        print(‘F1.show‘)
    def foo(self):
        print(self.name)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类
    def __init__(self,name):
        self.name = name

    def bar(self):
        print(‘bar‘)

obj = F2(‘xiaoming‘)
obj.foo()    #输出是xiaoming , 继承就相当于把父类的方法放到了子类中,所以这里输出的是xiaoming

out:

4.复杂继承

class S1:
    def F1(self):
        self.F2()  #此时的self相当于对象obj
    def F2(self):
        print(‘S1.F2‘)

class S2(S1):
    def F3(self):
        self.F1()
    def F2(self):
        print(‘S2.F2‘)

obj = S2()
obj.F3()
#输出是S2.F2  , 执行过程:执行S2类中的F3方法时,会去执行self.F1()方法,因为S2中没有该方法,所以去父类中寻找,父类有该方法,
# 那么就执行父类中的F1()方法,在执行F1()方法时,会执行self.F2()。因为继承的本质是把父类的方法复制到子类中,
# 所以def F1(self):self.F2() 放到了S2类中,因为S2类中有F2方法,所以执行S2类中的F2()方法。子类和父类有相同的方法时,子类方法优先级高。

#只要到self.F2()这样的时候,直接回到原点寻找。例如该例子中应该回到S2类中寻找F2()方法,
# 发现子类S2中有该方法,那么直接执行。如果S2类中没有,那么去父类中寻找F2()方法

二、多继承

1、简单的多继承
class C0:
    def f1(self):
        print(‘C0_f1‘)
class C1(C0):

    def f2(self):
        print(‘C1_f2‘)

class C2:
    def f2(self):
        print(‘C2_f2‘)

class C3(C2,C1):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C2_f2

out:

C2_f2

2、复杂的多继承


class C0:
    def f2(self):
        print(‘C0_f1‘)
class C1(C0):

    def f1(self):
        print(‘C1_f2‘)

class C2:
    def f2(self):
        print(‘C2_f2‘)

class C3(C1,C2):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C0_f1

out:

C0_f1

执行流程:

 
3、复杂继承关系
class C_2:
    def f2(self):
        print(‘C_2_f2‘)
class C_1(C_2):
    def f2(self):
        print(‘C_1_f2‘)
class C0(C_2):
    def f1(self):
        print(‘C0_f2‘)
class C1(C0):

    def f1(self):
        print(‘C1_f2‘)

class C2(C_1):
    def f2(self):
        print(‘C2_f2‘)

class C3(C1,C2):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C0_f1

out:

C2_f2

执行流程

总结:

如果子类的两个父类没有共同的父类的话,是一条道走到黑


如果子类的两个父类有共同的父类的话,是C1-->C0   然后是C2-->C_1-->C_2

				
时间: 2024-10-09 17:01:05

python-类的继承的相关文章

python类的继承

Python 类的一些基本概念 Python中一切皆对象,声明变量函数等的过程实际上就是它们到内存中为对象分配的空间的连接.Python中的类同Java.C++一样,有自己的属性与方法.属于一个对象或类的变量被称为域. 域有两种类型--属于每个实例/类的对象或属于类本身,它们分别被称为实例变量和类变量. 类的变量 由一个类的所有对象(实例)共享使用.所有对象共用一个类变量的拷贝.对象的变量 由类的每个对象/实例拥有.因此每个对象有自己对这个域的一份拷贝. 类的方法与普通的函数只有一个特别的区别-

python类的继承和多态

python类的继承和多态 现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了.之前学C++的时候就把类.对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象. 就像说的,类有三个特征:封装.继承.多态. 1.封装:类封装了一些方法,可通过一定的规则约定方法进行访问权限. C++中的成员变量有public.private.ptotected. 在python中,默认的成员变量都是public的,如果成员变量前面是加两个下划线,表示该成员变量是私有的

python 类定义 继承

1 定义一个时间类,带默认参数 class mytime(object): def __init__(self,hour=21, minute=13, second=50): self.hour = hour self.minute = minute self.second = second def __str__(self): return '__str__ hour:minute:second = %02d:%02d:%02d' %(self.hour,self.minute,self.se

python 类 六:继承自动寻找父类

本系列博客(python 类) 的部分例子来自于 <<python 核心编程 第二版>> 前面我们谈到 python 继承,是可以引用父类的__init__方法的 ,并在此基础上添加子类自己的特殊的属性的设定,形成子类自己的__init__  构造函数. 在这种方法中,必须显示的指出父类的名字. #coding:utf-8 class p(object):     def __init__(self,nm):         self.name  = nm class c(p):

Inheritance Of Python 类的继承

Inheritance OOP三要素之一,继承 人类和猫都继承自动物类. 个体继承自父母,集成了父母的一部分特征. 在面向对象的世界中,从父类继承,就可以直接拥有弗雷德属性和方法,这样可以减少代码,多复用.子类可以定义自己的属性和方法. 类的继承 对于python来讲,所有的祖先都是object,所有的类都继承自object class Animal: def __init__(self, name): self._name = name @property def name(self): re

Python类的继承和方法重写总结

我们都知道类可以继承,通过继承可以实现代码的复用,使代码看起来更加简洁 比如: Class B(A): Pass 定义了一个名为B的类,它继承于A,我们把B叫做A的子类,A叫做B的超类(父类). 方法重写 当子类定义了一个和超类相同名字的方法时,那么子类的这个方法将覆盖超类相同的方法(或称为重写) 先借用两个例子: >>> class Bird: ...     def __init__(self): ...         self.hungry = True ...     def 

python类的继承和重写

构造方法: def __init__(self) 路径: e:/pythonpro/liuyun/class02.py #——————类的构造方法——————- class person(): name ="张翰" sex = "男" #构造方法,固定的写法:初始化类 def __init__(self,xb): self.sex = xb self.test() def test(self): print("这是test方法") d = per

python类的继承、封装和多态

摘自https://www.cnblogs.com/evablogs/p/6724477.html 继承 1 2 3 4 5 6 7 8 class Person(object):     def __init__(self, name, gender):         self.name = name         self.gender = gender class Student(Person):    def __init__(self, name, gender,score):  

关于 python 类与继承中方法调用 的 一个小知识点记录

(1)D类,多继承于C类与B类,C类与B类继承于A类.C类中没用__init__(), C类的实例化会先寻找第一个继承类是否存在__init__(),也就是B类的__init__().因为python3中使用的是广度优先的方法,寻找路径为D-->B-->C-->A 关于其他方法的继承,也是这个顺序. class A(object): def __init__(self): print("i am A") def call(self): print("A CA

python类的继承的两种方式

class Animal(object): """docstring for Animal""" def __init__(self, name): self.name = name def run(self): print 'Animal is running...' class Dog(Animal): """docstring for Dog""" def __init__(sel