Python进阶类的探讨——超类、多个超类、继承、接口

Python文章为基础篇,主要提供给基础生查看资料学习使用!本博主的主要方向为网络安全,讲解黑客技术。后期在制作黑客工具时,会用到Python这门语言。所以,在此提供一些基础的Python知识!

什么是类,在上篇内容已经讲过了,相信你看过之后,就能立马理解了。请参考:《为了给女朋友讲清楚Python中的类,熬到凌晨两点我也不喊累!》
这篇内容,我们将继续探讨类的博大。在类的基本定义之后,就会有延伸的内容。这就是超类、继承以及接口和内省。

一、超类

超类也称父类,要指定A类是B类的父类,只需要在B类的括号里面加上A类的名称即可。示例:

class A():
    def set_name(self,name):
        self.name = name
    def get_name(self):
        return self.name
class B(A):
    def greet(self,str):
        self.str = str
        return self.str
str = "I like Python!"
b = B()
b.set_name("Honker")
Name = b.get_name()
print("My name is {}.".format(Name))
print()
Say = b.greet(str)
print("I say,{}.".format(Say))

在这里插入图片描述
在上述示例中,A类是B类的父类,也就是说A类是超类。那么在这个父类与子类的诞生过程中,也就出现了继承关系。

二、继承

有了超类,那就必有继承!继承也就是说子类继承父类的公有变量及方法。子类的对象也可以调用,在上述示例中,我通过B类的对象b,去调用父类中的set_name()和get_name()方法。

这是通过简单的代码就能看出B类继承了A类。那么在较复杂的程序中,如何进行判断一个类是否是另一个类的子类呢?这时可用内置方法issubclass来判断。

在上述示例中,最后加了一句:

print(issubclass(B,A))
print(issubclass(A,B))

在这里插入图片描述
打印结果是一个布尔类型,进行判断。要判断的子类名称写在前,父类名称写在后。

除了判定两个类是不是父子类,Python中还有一个特殊属性,查找一个类的基类。

print(B.__bases__)
print(A.__bases__)

在这里插入图片描述
不难看出,B类的基类为A类,A类的基类则是object。反过来说就是祖类的派生类。所有单独创建的类的基类都是object。而在此示例中,B类则是A类的子类,所以B类的基类是A类。

另外要进行判断一个对象是不是一个类的实例。
接着上面的示例,我加了几行代码:

class C():
    def set_name(self,name):
        self.name = name

print(isinstance(b,B))
print(isinstance(b,A))
print(isinstance(b,C))

在这里插入图片描述
打印结果如上图所示,也就是说对象b即是B的对象也是A的对象。而和C类毫无关联。对象b是B类的直接实例,同时是A类的间接实例。可以这么理解,B类生了个b这个对象,B类又是A类的子类,所以对象b是B的儿子A的孙子。

下面一个属性就是寻找一个对象是属于哪个类:

print(b.__class__)

在这里插入图片描述
三、多个超类

强大的Python能允许一个类同时继承多个类。这也被称为多重继承,示例:

class Say():
    def say(self,what):
        self.what = what
        return self.what
class Sing():
    def sing(self,what):
        self.what = what
        return self.what
class Jump():
    def jump(self,what):
        self.what = what
        return self.what

class XiaoCai(Say,Sing,Jump):
    pass

kun = XiaoCai()

SAY = kun.say('I like playing basketball.')
SING = kun.sing('I can also play basketball while singing.')
JUMP = kun.jump('I can still play basketball!')

print('Kun Kun has three words to say:{}{}{}'.format(SAY,SING,JUMP))

在这里插入图片描述
由上面示例可以看出,小蔡这个类继承了说、唱、跳。她自己本身却不需要功能,直接继承了说唱跳就有了其功能。接着我们给了一个坤坤对象,这个对象来自小蔡。然后通过坤坤调用说唱跳里面的方法!

这里必须注意的是:在继承多个类的时候,如果超类以不同的方式实现了同一个方法,也就是多个同名方法,则在继承时括号里的超类顺序要注意,位于前面的类的方法将覆盖位于后面的类的方法。

四、接口

如果你有接触过Java,那么对接口应该也是熟悉的。Python中的接口和Java类似,只是编写了一些方法却没有实现(缺少功能)。而功能则是需要继承接口的类来完成实现,通过重写接口中的方法,来补充功能!示例:

class Say():
    def say(self,what):
        pass
class Sing():
    def sing(self,what):
        pass
class Jump():
    def jump(self,what):
        pass

class XiaoCai(Say,Sing,Jump):
    def say(self,what):
        self.what = what
        return self.what
    def sing(self,what):
        self.what = what
        return self.what
    def jump(self,what):
        self.what = what
        return self.what

kun = XiaoCai()

SAY = kun.say('I like playing basketball.')
SING = kun.sing('I can also play basketball while singing.')
JUMP = kun.jump('I can still play basketball!')

print('Kun Kun has three words to say:{}{}{}'.format(SAY,SING,JUMP))

在这里插入图片描述
这个示例与上一个示例差不多,我只是稍作修改。说、唱、跳这几个类就成为了接口,只有方法,却没有实现。小蔡这个类继承了上面几个方法,进而重写了说、唱、跳里面的方法,来实现功能!

到这里,这篇文章就讲完啦!希望对你有所帮助,原创不易,能否留下个赞呢?谢谢~

往期推荐:

  1. 为了给女朋友讲清楚Python中的类,熬到凌晨两点我也不喊累!
  2. 用Python造一个键盘记录功能出来!
  3. 死亡之ping

Python进阶类的探讨——超类、多个超类、继承、接口_第1张图片

你可能感兴趣的:(Python)