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
  • 相关阅读:
    sqlserver添加表、字段注释
    SQL语句增加字段、修改字段、修改类型、修改默认值
    端口概念
    删除数据库数据
    转移数据库表数据
    优化网站
    提高SQL查询效率
    相关方法扩展
    SQL空和NULL的区别
    C#分布式缓存Couchbase使用
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/4724046.html
Copyright © 2011-2022 走看看