python可以分为单继承和多继承;
单继承:
单继承就是继承一个类的时候,现在我们定义一个Student
类
class Student():
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print(self.name+": I'm a student!")
然后再写一个LiLei
的类,用于继承Student,表明LiLei是一个学生。
这个是一个错误的示例,为什么?我也不知道。
class LiLei(Student):
def __init__(self,name,age):
#super(Student, self).__init__(name, age)
#上面这样写会报错,不知道为啥,我的会
super().__init__(name, age)#(1)第一种方式
Student.__init__(self, name, age)#(2)第二种方式
def say(self):
print("我叫李磊")
这样就表明李磊是一个学生了。接下来,李磊就能够行使他作为学生的权力,并且也会保留有自己独特的属性。
if __name__ == '__main__':
lilei=LiLei("aa",100)
lilei.show()#-->aa: I'm a student!
lilei.say()#-->我叫李磊
按照上面的样子,李磊就拥有了show
和say
两种函数了,然后我们就可以使用他了。接下来我们用更专业一点的方法证明李磊是一个学生。
print(isinstance(lilei,Student))#-->True
print(isinstance(lilei,LiLei))#-->True
print(issubclass(LiLei,Student))#-->True
上面就是单继承的基本概念了,总结来说,就是子类可以继承父类的一切属性,也能够覆盖父类的属性或者拥有自己独特的属性。
多继承
简而言之,和单继承是差不多的,例如上面的李磊
class Student(object):
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print(self.name+": I'm a student!")
class LiLei(Student):
def __init__(self,name,age):
Student.__init__(self, name, age)
def say(self):
print("我叫李磊")
if __name__ == '__main__':
lilei=LiLei("aa",100)
lilei.show()
lilei.say()
print(isinstance(lilei,Student))
print(isinstance(lilei,LiLei))
print(issubclass(LiLei,Student))
接下来我再加一个父类:
class Son(object):
def __init__(self,name,age):
self.name=name
self.age=age
def nick(self):
print("李二哈!")
李磊同时还是她父母的儿子,我们也将这个身份挂载到李磊的身上去,那么李磊就变成这样了:
class LiLei(Student,Son):
def __init__(self,name,age):
Student.__init__(self, name, age)
Son.__init__(self, name, age)
def say(self):
print("我叫李磊")
这样,我们就拥有了三重身份:李磊,学生,儿子。李磊能够行使三个人的权力。总结来说,多继承跟单继承是差不多的,只不过能够拥有更多的身份而已 。
完成代码:
class Student(object):
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print(self.name+": I'm a student!")
class Son(object):
def __init__(self,name,age):
self.name=name
self.age=age
def nick(self):
print("李二哈!")
class LiLei(Student,Son):
def __init__(self,name,age):
Student.__init__(self, name, age)
Son.__init__(self, name, age)
def say(self):
print("我叫李磊")
if __name__ == '__main__':
lilei=LiLei("aa",100)
lilei.show()#-->aa: I'm a student!
lilei.say()#-->我叫李磊
lilei.nick()#-->"李二哈!
print(isinstance(lilei,Student))#-->True
print(isinstance(lilei,Son))#-->True
print(isinstance(lilei,LiLei))#-->True
print(issubclass(LiLei,Student))#-->True
print(issubclass(LiLei,Son))#-->True