Python同样支持类的继承,如果一种语言不支持继承,类就没有什么意义
class A(): #这是父亲类
def hello(self):
print("我是父类")
class B(A): #这是儿子类,继承了父亲的性格
def __init__(self):
print("我是子类")
ss = B() #实例化B
ss.hello() #调用父亲的类
可以看到,在定义B类的时候,括号里面加了个A,这样就写成了一个继承类,B是A的儿子,B继承了A的一切。B可以随时调用它的父亲A里面的函数。这就是继承的语法,需要注意的是,所有的类都是object的子类。
单继承和多继承:
单继承:每个类只能继承一个类
多继承:每个类允许继承多个类
class Fish(): #定义一个鱼类,会游泳
def __init__(self,name):
self.name = name
def swim(self):
print(self.name)
print("我会游泳")
class Bird(): #定义一个鸟类,会飞
def __init__(self,name):
self.name = name
def fly(self):
print(self.name)
print("我会飞")
class person(): #定义一个人类,会工作
def __init__(self,name):
self.name = name
def work(self):
print(self.name)
print("我会工作")
class SuperMan(person,Bird,Fish):#超人,要会工作,会飞,会游泳
def __init__(self,name):
self.name = name
s = SuperMan("我是超人")
s.fly()
s.work()
s.swim()
这里定义了一个超人,那么既然是超人,那就要会飞,会游泳,会做人类做的事,所以很形象的解释出了一个关于多继承的例子
只要继承了一个父亲类,那么我们可以随时调用父亲里面的函数,子类继承是有顺序的,它会按照顺序来查看。关于多继承,我们不推崇这种写法,隐患很多,一旦出了bug,那么很难找出来。
类里面还有一种写法,叫组合:
class Milk():
def __init__(self,x):
self.num = x
class Porridge():
def __init__(self,x):
self.num = x
class breakfast():
def __init__(self,x,y):
self.milk = Milk(x)
self.porridge = Porridge(y)
def name(self):
print("我今天早餐吃了{0}杯牛奶,{1}碗粥".format(self.milk.num,self.porridge.num))
ss = breakfast(2,3)
ss.name()
这就是组合,直接把需要的类放进去实例化就可以了
如果想扩展父类的构造函数,那么就有这个写法:
class B():
def __init__(self,name):
print("B")
print(name)
class C(B):
def __init__(self,name):
B.__init__(self,name) #首先调用父类的构造函数
print("这是c中附加的功能")#其次再增加自己的功能
c = C("我是c")
这就扩展了父类的构造函数。
关于继承类的语法,都不难理解,主要是看自己怎么运用。