#FileName : baseClass.py
#继承的方式,内建函数super的使用,多重继承
#定义父类Parent
class Parent(object):
def __init__(self):
print('Calling Parent‘s Constructor')
#定义子类Chaild
class Child(Parent):
def __init__(self):
#重写子类的构造器不会调用父类的构造器,所有要在子类构造器内部调用__init__
#Parent.__init__(self) #显示的传递self参数
#使用内建函数super()代替Parent:让内建函数super查找谁是父类:使用内建函数super的好处是:代码修改回相应的减少
super(Child,self).__init__()
print('Calling Child’s Constructor')
#使用子类Child构建实例
c = Child()
#查看实例c属于哪个类
print(c.__class__)
#查看类Child的基类是哪个
print(Child.__bases__)
#查看类Parent的基类是哪个
print(Parent.__bases__)
#之前的Python版本对类的继承要求很严格(带有object有着明确的区分,3.0以后没有这区分(默认带有object))
#3.0之前的多重继承的方法解释顺序(不带有Object:深度优先,从左到右,;带有object:首先查找同胞兄弟,采用一种广度优先的方式)
#3.0以后都是采用首先查找同胞兄弟,采用一种广度优先的方式
print('多重继承的使用:--------------------------------')
print()
#定义类p1,p2
class p1:
def foo(self):
print('p1______foo')
class p2:
def foo(self):
print('p2______foo')
def bar(self):
print('p2_____bar')
#定义两个子类c1,c2
class c1(p1,p2):
pass
class c2(p1,p2):
def bar(self):
print('c2______bar')
#在定义一个子类gc
class gc(c1,c2):
pass
#使用gc构建实例
g = gc()
g.foo() #方法解释顺序:g=>c1->c2=>p1
g.bar() #方法解释顺序:g->c1->c2()