写在前面的话:码字不易,点个赞关注一下作者再走吧〔呲牙〕 1。继承 编写类时,并非总是要从空白开始,如果要编写的类时一个现成类的特殊版本,可使用继承 一个类继承另一个类时,将自动获得另一个类的所有属性和方法;原有的类称为父类,新类称为子类。 子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法1。子类的方法init()模拟电动ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a,电动ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a是一种特殊的ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a,因此可以在前面创建的Car()类基础上创建新的ElectricCar,这样就只需为电动ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a特有的属性和行为编写代码classCar():definit(self,make,model,year):一次模拟ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a的简单尝试self。makemakeself。modelmodelself。yearyearself。odometerreading0defgetdescriptivename(self):longnamestr(self。year)self。makeself。modelreturnlongnamedefreadodometer(self):print(thiscarhasstr(self。odometerreading)milesonit)defupdateodometer(self,mileage):ifmileageself。odometerreading:self。odometerreadingmileageelse:print(youcannotrollbackanodometer)defincrementodometer(self,miles):self。odometerreadingmilesclassElectricCar(Car):创建一个子类,继承父类电动车的独特之处definit(self,make,model,year):接受父类的信息初始化父类的属性,super()函数帮助关联父类和子类super()。init(make,model,year)myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())2016teslamodels2。给子类定义属性和方法classCar():definit(self,make,model,year):一次模拟ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a的简单尝试self。makemakeself。modelmodelself。yearyearself。odometerreading0defgetdescriptivename(self):longnamestr(self。year)self。makeself。modelreturnlongnamedefreadodometer(self):print(thiscarhasstr(self。odometerreading)milesonit)defupdateodometer(self,mileage):ifmileageself。odometerreading:self。odometerreadingmileageelse:print(youcannotrollbackanodometer)defincrementodometer(self,miles):self。odometerreadingmilesclassElectricCar(Car):创建一个子类,继承父类电动车的独特之处definit(self,make,model,year):接受父类的信息初始化父类的属性,super()函数帮助关联父类和子类super()。init(make,model,year)self。batterysize70给子类定义属性defdescribebattery(self):给子类定义方法打印一条描述电池容量的消息print(thiscarhasstr(self。batterysize)kwhbattery)myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())mytesla。describebattery()2016teslamodelsthiscarhas70kwhbattery3。重写父类的方法对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其重写。为此,可在子类中定义一个与要重写的父类方法同名,python将不会考虑父类方法,只关注子类中定义的相应方法假设Car类有一个名为fillgastank()的方法,对电动车来说毫无意义,需要重新改写classElectricCar(Car):snipdeffillgastank():电动ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a没有油箱print(thiscardoesnotneedagastank)4。将实例用作属性,将类的一部分作为一个独立的类提取出来classCar():definit(self,make,model,year):一次模拟ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a的简单尝试self。makemakeself。modelmodelself。yearyearself。odometerreading0defgetdescriptivename(self):longnamestr(self。year)self。makeself。modelreturnlongnamedefreadodometer(self):print(thiscarhasstr(self。odometerreading)milesonit)defupdateodometer(self,mileage):ifmileageself。odometerreading:self。odometerreadingmileageelse:print(youcannotrollbackanodometer)defincrementodometer(self,miles):self。odometerreadingmilesclassBattery():定义一个名为Battery的新类模拟电动车的简单尝试definit(self,batterysize70):初始化电瓶属性self。batterysizebatterysizedefdescribebattery(self):给子类定义方法打印一条描述电池容量的消息print(thiscarhasstr(self。batterysize)kwhbattery)classElectricCar(Car):创建一个子类,继承父类电动车的独特之处definit(self,make,model,year):接受父类的信息初始化父类的属性,super()函数帮助关联父类和子类super()。init(make,model,year)self。batteryBattery()添加一个名为self。battery的属性,并将Battery()实例存储在属性self。battery中myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())mytesla。battery。describebattery()2016teslamodelsthiscarhas70kwhbattery2。导入类 python允许将类存储在模块中,然后在主程序中导入所需的模块1。导入单个类创建一个Car()类,存储在car。py的模块中classCar():definit(self,make,model,year):一次模拟ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a的简单尝试self。makemakeself。modelmodelself。yearyearself。odometerreading0defgetdescriptivename(self):longnamestr(self。year)self。makeself。modelreturnlongnamedefreadodometer(self):print(thiscarhasstr(self。odometerreading)milesonit)defupdateodometer(self,mileage):ifmileageself。odometerreading:self。odometerreadingmileageelse:print(youcannotrollbackanodometer)defincrementodometer(self,miles):self。odometerreadingmiles2016audia4thiscarhas23milesonit2。在一个模块中存储多个类新建一个Car()类,存储在car。py的模块中classCar():definit(self,make,model,year):一次模拟ahrefhttps:www。q578。coml80targetblankclassinfotextkey汽车a的简单尝试self。makemakeself。modelmodelself。yearyearself。odometerreading0defgetdescriptivename(self):longnamestr(self。year)self。makeself。modelreturnlongnamedefreadodometer(self):print(thiscarhasstr(self。odometerreading)milesonit)defupdateodometer(self,mileage):ifmileageself。odometerreading:self。odometerreadingmileageelse:print(youcannotrollbackanodometer)defincrementodometer(self,miles):self。odometerreadingmilesclassBattery():定义一个名为Battery的新类模拟电动车的简单尝试definit(self,batterysize70):初始化电瓶属性self。batterysizebatterysizedefdescribebattery(self):给子类定义方法打印一条描述电池容量的消息print(thiscarhasstr(self。batterysize)kwhbattery)classElectricCar(Car):创建一个子类,继承父类电动车的独特之处definit(self,make,model,year):接受父类的信息初始化父类的属性,super()函数帮助关联父类和子类super()。init(make,model,year)self。batteryBattery()添加一个名为self。battery的属性,并将Battery()实例存储在属性self。battery中2016teslamodelsthiscarhas70kwhbattery3。从一个模块中导入多个类fromcarimportCar,ElectricCarmybeetleCar(bmw,q7,2016)print(mybeetle。getdescriptivename())myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())2016bmwq72016teslamodels4。导入整个模块importcarmybeetleCar(bmw,q7,2016)print(mybeetle。getdescriptivename())myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())2016bmwq72016teslamodels5。导入模块中的所有类frommodulenameimport6。在一个模块中导入另一个模块将Car类存储在car。py文件中,将ElectricCar和Battery存储在一个叫electriccar。py的文件中如何创建car。py文件classCar():snip如何创建electriccar。py文件fromcarimportCar将Car类导入到该模块中,因为ElectricCar类需要访问其父类CarclassBattery():snipclassElectricCar(Car);snip新建一个mycars。py的文件fromcarimportCarfromelectriccarimportElectricCarmybeetleCar(bmw,q7,2016)print(mybeetle。getdescriptivename())myteslaElectricCar(tesla,models,2016)print(mytesla。getdescriptivename())2016bmwq72016teslamodels