python学习之类与对象的继承
类的继承
继承的用法:
class 类名(父类):
没有继承前,我们如果想用另一个类里面的大多数功能或者全部功能,我们只能去手动复制另一个类中的需要用到的代码,然后粘贴到本类中,这就失去了代码的特性复用性,所以出现了继承的概念
继承就是:把父类的功能和属性继承下来,然后子类就拥有了和父类一样的功能,父类中的所有属性和方法都可以被子类调用,而且子类还可以拥有属于它自己的独特的方法
比如:手机类有打电话,发短信,看视频,听音乐等功能,但是这些功能还不满足需求,现在想要创建一个华为手机类,它既有打电话,发短信,看视频,听音乐等功能,还有5G的功能,此时就可以用继承
首先把手机类中的所有方法都继承下来,然后在创建自己独特的方法
案例:
手机类:
class Phone: ”’ 这是一个手机类 主要功能有,打电话,发短信,看电视,听音乐 主要属性有,华为,3000,土豪金,android ”’ #通过初始化函数__init__把属性进行初始化 def __init__(self,brand_name,price,color,os):#可以给初始化参数进行默认值 self.brand_name =brand_name self.price=price self.color= color#把参数赋值给对象,只能用对象调用 Phone.os = os#把参数赋值给类,既可以用类调用也可以用对象调用 #功能,定义了几个方法 def call(self,name): print(‘我的功能是打电话,我给{}打电话’.format(name)) @staticmethod def massage(*arge): print(‘我的功能是用来发短信的,我的短信内容是{}’.format(arge)) @classmethod def watchTV(cls):#类方法,在类方法中调用对象方法,需要类名().方法名(),调用静态方法直接类名.方法名() print(‘我的功能是看电视的’) return ‘我的功能是看电视的’ @classmethod def music(self,music_name=’天堂’): print(‘我的功能是用来听音乐的,我听的歌曲是{}’.format(music_name)) def calss_info(self):#对象方法 print(‘我的手机是{}手机,颜色是{},是{}系统,价格是{}元’.format(self.brand_name,self.color,self.os,self.price)) #调用类 #p=Phone(‘华为’,3500,’土豪金’,’android’)# 调用类需要在类的后面加一个括号 #p=Phone() #p.call(‘张三’) #p.calss_info() if __name__ == ‘__main__’: Phone.massage(‘今天周末明天又要上班’) Phone.watchTV()
创建一个华为手机类
import calss_init #创建华为类,让它继承手机类 class HuaWei(calss_init.Phone): #华为手机支持5G def G5(self): w =self.watchTV() print(‘我可以用5g了,{0},我可以用5g看电视’.format(w)) #因为父类中有初始化函数,所以继承后创建对象时就需要给初始化参数赋值 h=HuaWei(‘华为’,5000,’蓝色’,’android’) #调用父类里面的call方法 h.call(‘张三’) h.G5()
继承相关的拓展和重写
拓展:就是父类没有的方法,子类独有的方法
重写:就是父类已有的方法,在子类中重新定义新的功能,方法名相同,功能不同
#导入手机类 import calss_init #创建华为类,让它继承手机类 class HuaWei(calss_init.Phone): #华为手机支持5G def G5(self):#这个方法就是拓展出来的方法,是父类中不存在的 w =self.watchTV() print(‘我可以用5g了,{0},我可以用5g看电视’.format(w)) def music(self):#这个方法在父类中存在 这里重新写了不同的功能 print(‘我是一个新的方法,我可以下载歌曲’) #因为父类中有初始化函数,所以继承后创建对象时就需要给初始化参数赋值 h=HuaWei(‘华为’,5000,’蓝色’,’android’) #调用父类里面的call方法 h.call(‘张三’) h.G5() h.music()#此时的music的功能是子类的重新后的功能,和父类没关系