类的继承
子类继承父类,自动具备了父类中的非私有属性和非私有方法,不需要重新定义,并且可以自己增加新的内容和属性。
在 Python中,object类是所有类的最终父类,除非说明,默认继承object类,
在Python中与c++一样,支持多继承,即一个类可以有多个父类,(而在java中,只允许单的继承)。
继承的语法格式:
class animal:
def __init__(self, name): #构造函数
self.name = name
def getname(self):
return self.name
def setname(self, name):
self.name = name
def fun(self):
print("我是一个动物")
class bird(animal): #这是子类
def __init__(self, name, zhonglei):
super(bird, self).__init__(name) #调用父类的构造函数
self.zhonglei = zhonglei
def set(self, name, zhonglei):
self.setname(name)
self.zhonglei = zhonglei
def fun1(self):
print("我是一只小鸟")
b = bird("张三", "鸟")
print(b.getname())
b.fun()
b.fun1()
b.set("李四", "鸳鸯")
'''
张三
我是一个动物
我是一只小鸟
'''
格式就是:
class class_name(father_class_name):
子类调用父类的构造函数格式如下:
super(son_class_name , self).__init__()
构造函数
在上例子中也已经用到过构造函数了,init().创建子类对象时,子类一般都会重写构造函数,并调用父类的构造函数,,
多重继承
就是一个类有多个父类,这种情况容易出现问题,
比如一个类A,并有方法fun(), 类B继承了A并重写了方法fun(),而类C继承A和B(),并调用方法fun(),那么此时执行哪一个方法呢。
在Python中规定,执行继承链上最近的方法,即执行B中的fun()方法。
组合:
在Python中,同样支持组合:
class animal:
def __init__(self, name): #构造函数
self.name = name
def getname(self):
return self.name
def setname(self, name):
self.name = name
def fun(self):
print("我是一个动物")
class bird(animal): #这是子类
def __init__(self, name, zhonglei):
self.a = animal("鸟")
self.zhonglei = zhonglei
def set(self, name, zhonglei):
self.zhonglei = zhonglei
def fun1(self):
print("我是一只小鸟")
b = bird("张三", "鸟")
print(b.a.getname())
'''
鸟
'''