类的继承:类的继承,可以看作是一种属于关系。A类继承了B类,那么可以认为A类属于B类,即B拥有的东西和功能,A也同样拥有。广东人属于中国人,那我们就自然而然地知道广东人也有黑眼睛,黄皮肤这些特征,会说汉语这些技能。
在python当中,A类继承了B类,那计算机就知道A类属于B类,同时还拥有B类的所有属性以及方法。此时,A称为B的子类,B称为A的父类或超类。
类的定制:如果说类的继承是一种传承,那么类的定制就是创新发展,在传承前人的优秀文化的基础上,进行改革创新,使之符合现代社会发展的需求。类的定制包含两方面的内容:(1)创建新的属性和方法;(2)修改继承的属性或方法。
例如,广东人会说粤语,这就是广东人相较于中国人的新的技能;而广东人的居住面积是广东省面积,显然不再是中国人的中国面积,这就是属性的修改。
类的继承语法结构如下:class A(B) ,其中A是子类,B是父类。
另外,Chinese类其实也有父类,即object类,它是所有类的父类,也叫做根类。利用isinstance()函数可以判断某个实例是否属于某个类,其中第一个参数是实例对象,第二个参数是类,如果属于返回True,否则返回False。
xijinping = Chinese() me = Cantonese() # 子类实例属于父类 print(isinstance(me,Chinese)) # 父类实例不属于子类 print(isinstance(xijinping,Cantonese)) # 类的实例都属于根类 print(isinstance(xijinping,object)) print(isinstance(me,object))多层继承即一层又一层继承,是深度。例如广东人属于中国人,中国人属于地球人。
# 地球人类 class Earthpeople: mouth = 1 def do(self): print("地球人能直立行走") # 中国人类继承了地球人类 class Chinese(Earthpeople): hair = "yellow" eyes = "black" def eat(self): print("中国人会说汉语") # 广东人类继承中国人类,地球人类是广东人类的父类的父类 class Cantonese(Chinese): pass # pass表示不执行任何操作如果说多层继承是深度拓展,那么多重继承就是宽度延展。多重继承的语法是:class A(B,C,D....)
class Student: uniform = "学生装" def say(self): print("I am a student") class Teacher: uniform = "职工装" daf say(self): print("I am a teacher") # 辅导员类继承学生类和教师类 class instructor(Teacher,Student): pass love = instructor() print(love.uniform) love.say()在多重继承当中,遵循着“就近原则”,即子类在调用属性和方法的时候,会优先从靠左的父类中查找。例如上面的代码中,由于靠左的是Teacher类,因此打印出来的love.uniform的结果是职工装,而love.say输出的是I am a teacher。
可以直接重写:
class Chinese: def land(self,area): print("面积是{}平方公里".format(area)) class Cantonese(Chinese): # 直接重写方法 def land(self,area): print("面积是{}平方公里".format(area*0.0188))但是,这样写显然不利于代码的维护,十分麻烦,因此可以间接重写:
class Chinese: def land(self,area): print("面积是{}平方公里".format(area)) class Cantonese(Chinese): # 调整参数间接重写方法 def land(self,area,r=0.0188): Chinese.land(self,area*r)如此一来,如果父类代码有所改动,那么子类也可以自动修改,而无需人工对子类进行修改。