美文网首页
Python继承

Python继承

作者: 尼古拉苏 | 来源:发表于2018-07-16 22:03 被阅读0次

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继承

      本文链接:https://www.haomeiwen.com/subject/idybpftx.html