类的定制和类的继承
这两个知识点可以让用类写成的代码更容易复用、拓展和维护
1)基本概念 ①类的继承让计算机知道:A类属于B类,自然也拥有了B类的所有属性和方法。这句话在编程里就是:A类继承了B类。
类的继承在Python中,我们的习惯表述是:A类是B类的子类,而B类是A类的父类(或超类)。
不过,只有继承的话,子类只是父类的复制而已。那样,为什么不直接用父类,还要增加一个子类?要回答这个问题,就需要了解另一个重要的概念:类的定制。
②类的定制还是说回广东人,广东人除了继承中国人的属性方法外,还可以创造【属于自己】的属性或方法,如籍贯开头是广东省(属性)、会说广东话(方法)。甚至,广东人还可以调整继承到的属性或方法,如中国人有个属性“居住的陆地面积(单位:万平方公里)”的值为960,广东人继承后需要将这个属性的值改为17.98。上面的操作,都可以说是广东人在继承的基础上又做了定制。
同样,子类也可以在继承的基础上进行个性化的定制,包括:(1)创建新属性、新方法;(2)修改继承到的属性或方法。
简而言之:类的定制,不仅可以让子类拥有新的功能,还能让它有权修改继承到的代码
2)语法 ①继承的基础语法用代码表示继承,语句是:
继承的语法#先阅读代码,再运行代码。 class Chinese: eye = 'black' def eat(self): print('吃饭,选择用筷子。') class Cantonese(Chinese): pass # pass表示'跳过',不执行其他操作 yewen = Cantonese() print() () --------------------------------------------- black 吃饭,选择用筷子。
实例yewen(叶问)是Cantonese(广东人)这个类创建的实例,却拥有Chinese才有的属性和方法。原因你也知道,继承的呗~
不过,很多类在创建时也不带括号,如class Chinese:
。这意味着它们没有父类吗?并不。实际上,class Chinese:
在运行时相当于class Chinese(object):
。而object,是所有类的父类,我们将其称为根类(可理解为类的始祖)。
函数isinstace()函数isinstance()
,可以用来判断某个实例是否属于某个类。具体用法是输入两个参数(第一个是实例,第二个是类或类组成的元组),输出是布尔值(True 或 False)。跑下代码你就完全懂了:
#阅读代码和注释,直接运行 print(isinstance(1,int)) # 判断1是否为整数类的实例 print(isinstance(1,str)) print(isinstance(1,(int,str))) # 判断实例是否属于元组里几个类中的一个 ------------------------------------------------ True False True
②类的继承之多层继承多层继承#先阅读代码和注释,然后直接运行代码。 class Earthman: eye_number = 2 # 中国人继承了地球人 class Chinese(Earthman): eye_color = 'black' # 广东人继承了中国人,同时也继承了地球人。 class Cantonese(Chinese): pass yewen = Cantonese() print(_number) print(_color) ------------------------------- 2 black
在代码最后两行,我们看到:实例yewen可以调用父类Chinese和父类的父类Earthman中的属性。可得结论:子类创建的实例可调用所有层级父类的属性和方法。
③类的继承之多重继承一个类,可以同时继承多个类,语法为class A(B,C,D):
。假设我们将“出生在江苏,定居在广东的人”设为一个类Yuesu,那么,它的创建语句则为class Yuesu(Yue,Su)
。
class Yuesu(Yue,Su)
括号里Yue和Su的顺序是有讲究的。和子类更相关的父类会放在更左侧。我认为“出生在江苏,定居在广东的人”在穿着和饮食等方面会更接近广东人,所以将 Yue 放在 Su 的左侧。
所以,广东人创建的实例在调用属性和方法时,会先在左侧的父类中找,找不到才会去右侧的父类找。(可理解为“就近原则”)
lass Su: born_city = 'Jiangsu' wearing = 'thick' # 穿得较厚 def diet(self): print('我们爱吃甜。') class Yue: settle_city = 'Guangdong' wearing = 'thin' # 穿得较薄 def diet(self): print('我们吃得清淡。') class Yuesu(Yue,Su): pass xiaoming = Yuesu() print() print(_city) () ------------------------------- thin Jiangsu 我们吃得清淡。
小结一下代码中体现的就近原则:越靠近子类(即越靠左)的父类,越亲近,越优先考虑。子类调用属性和方法时,会先在靠左的父类里找,找不到才往右找。对比一下这两种有趣的继承方法:
多层继承和多重继承 ④类的定制怎么写?1. 新增代码class Chinese: eye = 'black' def eat(self): print('吃饭,选择用筷子。') class Cantonese(Chinese): # 类的继承 native_place = 'guangdong' # 类的定制 def dialect(self): # 类的定制 print('我们会讲广东话。') yewen = Cantonese() print() # 父类的属性能用 print(_place) # 子类的定制属性也能用 () # 父类的方法能用 () # 子类的定制方法也能用 ----------------------------------- 吃饭,选择用筷子。 我们会讲广东话。
文章来源:《电脑编程技巧与维护》 网址: http://www.dnbcjqywh.cn/zonghexinwen/2020/0904/442.html
电脑编程技巧与维护投稿 | 电脑编程技巧与维护编辑部| 电脑编程技巧与维护版面费 | 电脑编程技巧与维护论文发表 | 电脑编程技巧与维护最新目录
Copyright © 2018 《电脑编程技巧与维护》杂志社 版权所有
投稿电话: 投稿邮箱: