Python继承

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()#-->我叫李磊

按照上面的样子,李磊就拥有了showsay两种函数了,然后我们就可以使用他了。接下来我们用更专业一点的方法证明李磊是一个学生。

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继承的概念:在现实生活中,继承一般指的是子女继承父辈的财产。所以产生了Python中产生了父类,子类的区别。这是,...
    周肸阅读 143评论 0 0
  • 编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承另一个类时,它将...
    一日歌阅读 322评论 0 1
  • 你知道五点二一的意思吗? “我爱你,比你多一点。” 韩是通过阿娟加上我的QQ的,其实在这之前,我也想方设法要找她。...
    Fruitjelly与韩的故事阅读 196评论 0 0
  • 第一张:吴世勋 第二张:边伯贤 第三张:朴灿烈 今天介绍的是凭着exo——亚洲男子人气偶像团出道的三位欧...
    圣音雪阅读 341评论 0 0
  • 作者| 职问学院法律求职训练营导师Alicia 很多人对外资所有很深的向往,之前我也是一样,对外资所有一定的了解之...
    860e5f198a40阅读 5,964评论 0 0