python代码,如何理解class类的继承关系?
发布于 作者:苏南大叔 来源:程序如此灵动~
python的思路不是一般的清奇,各种语法思路都和其它编程语言不一致,具有较大的区别。那么,python语言里面是如何实现类的继承的呢?又是如何判断类的继承关系的呢?带着这些疑问来查看本文的内容吧。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述一下python的类继承的写法。测试环境:mac,python@3.8.5。
普通的类
python中普通的类写法如下:
class University:
def __init__(self,name):
self.name = name
def introduce(self):
print("这是"+self.name)
U = University("北京大学")
U.introduce()
print('"U" IS university?', isinstance(U, University))- 在类名后面没有括号。
- 类初始化,参数在
__init__设置。 - 在类的方法里面,如果访问
self的话,必须在定义的第一个参数里面写上self。 - 调用类方法传递参数的时候,不用显示传递参数
self。 - 初始化类的时候,不用关键词
new。

继承类
这里定义两个类,一个类是person,另外一个叫做student。student类继承person类。如果是其它的编程语言的话,这里必然有个extends类似的关键字。
class Person:
def __init__(self, name):
self.name = name
def introduce(self):
print("我是",self.name)
def introduce2(self): #Student子类调用就可以,但是自身调用报错
print("我是",self.name,"来自",self.school.name)
def introduce3(self):
print("我是将要被改写的方法")
class Student(Person):
def __init__(self,name,University):
super().__init__(name)
self.school = University
def introduce3(self):
print("我是",self.name,"同学,来自",self.school.name)然而,这个python里面没有extends关键字。它在子类定义的时候,用类似参数的括号的方法继承了父类。而且,在父类中访问子类中初始化的属性的话,居然也不报错。是不是很神奇?

su = Student("苏南",University("北京大学"))
su.introduce()
su.introduce2()
su.introduce3()
pp = Person("苏南大叔")
pp.introduce()
pp.introduce3()
pp.introduce2()
但是,在父类的实例里面访问子类的实例对象的话,是必然会报错的。
网络流传代码
在网络流传的代码中,
- 一般的类会继承于
(object)。但是苏南大叔这边觉得没有啥好继承的时候,为啥要写?哈哈。 - 继承的子类在
__init__里面,要super(子类名,self),苏南大叔测试中写的代码是super()。目前的代码测试中,暂时没有啥问题。
class School(object):
def __init__(self):
pass
class University(School):
def __init__(self):
super(University,self).__init__()
self.name = name判断是否属于某个类
判断是否属于某个类,函数是isinstance(),另外一个判断类型的方法是type。使用方式如下:
print('"su" IS Student?', isinstance(su, Student), ">", type(su))
print('"pp" IS Student?', isinstance(pp, Student), ">", type(pp))
print('"su" IS Person?', isinstance(su, Person), ">", type(su))
print('"pp" IS Person?', isinstance(pp, Person), ">", type(pp))这里,因为su是个Student,继承自Person。所以,su和pp都是person,返回值都是true。

- 考虑继承关系,就使用
isinstance,更圆滑。 - 不考虑继承关系,就使用
type,更精准。
相关链接
综述
python的语法就是不走寻常路,这个类的继承语法,也是一如既往的清奇。