zoukankan      html  css  js  c++  java
  • python 多重继承

    python中的多重继承,多个父类中出现同名方法,子类在调用的时候,会出现深度优先还是广度优先的问题

    但是这要看Python的类是新式类还是经典类

    python中的新式类和经典类:

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。

    在python2.7中默认建的都是经典类

    有两种方法来建立新式类:

    1,把 __metaclass__ = type语句放在类模块代码的最前面
    2, 自己建的类都从内建类object直接或者间接地继承。

    经典类:

     1 class P1():
     2 
     3     def foo(self):
     4         print "P1 foo"
     5 
     6 
     7 class P2():
     8 
     9     def foo(self):
    10         print "P2 foo"
    11 
    12     def bar(self):
    13         print "P2 bar"
    14 
    15 
    16 class C1(P1, P2):
    17     pass
    18 
    19 
    20 class C2(P1, P2):
    21 
    22     def bar(self):
    23         print "C2 bar"
    24 
    25 
    26 class D1(C1, C2):
    27     pass
    28 d1 = D1()
    29 d1.foo() #P1 foo
    30 d1.bar() #P2 bar
    31 
    32 class D2(C2, C1):
    33     pass
    34 d2 = D2()
    35 d2.foo() #P1 foo
    36 d2.bar() #C2 bar

    新式类:

     1 class P1(object):
     2 
     3     def foo(self):
     4         print "P1 foo"
     5 
     6 
     7 class P2():
     8 
     9     def foo(self):
    10         print "P2 foo"
    11 
    12     def bar(self):
    13         print "P2 bar"
    14 
    15 
    16 class C1(P1, P2):
    17     pass
    18 
    19 
    20 class C2(P1, P2):
    21 
    22     def bar(self):
    23         print "C2 bar"
    24 
    25 
    26 class D1(C1, C2):
    27     pass
    28 d1 = D1()
    29 d1.foo() #P1 foo
    30 d1.bar() #C2 bar
    31 
    32 class D2(C2, C1):
    33     pass
    34 d2 = D2()
    35 d2.foo() #P1 foo
    36 d2.bar() #C2 bar
  • 相关阅读:
    Python进程、线程
    Maven项目的坐标GroupId和ArtifactId
    java中的变量
    java中new一个对象的执行过程及类的加载顺序
    java中string和int互相转化
    什么是设计模式?
    Mybatis解决了JDBC编程哪些问题
    SQL注入、占位符拼接符
    JDBC、事务和连接池
    关于Spring配置文件xml文档的schema约束
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/4724046.html
Copyright © 2011-2022 走看看