如果需要在类Microwave的基础上添加“增加”或“修改”功能且继续保留原来的类Microwave,可以使用继承的方式。
继承是指在原类的基础上创建一个新类,而新类会自动获取原类中的所有属性和方法。原类称为父类,新类称为子类。
类的继承方式
在创建新类时,class后面的括号用于继承父类且不接收参数。
class 子类名(父类名):
def __init (self,子参数):
super().__init__(父参数)
代码块
def 方法1()...
使用继承方式创建新类的形式,与直接创建新类的形式有以下两点区别:
第1点,新类中子类名后面的括号中需要写入父类名,表明该新类继承自哪个父类,且父类的代码必须要写在子类的前面,否则程序将无法找到对应的父类进行继承。
第2点,在新类初始化方法中,代码块的首行需要加入super().__init__(父参数】,用于表明将父类中的属性和方法与新类关联起来,且父参数是父类初始化时的形参。新类初始化方法中的子参数也需要包含父类的参数。
在使用类的继承方式时需要注意以下两点。
第1点,通过子类创建的对象可以使用子类和父类中的所有属性和方法。
第2点,通过父类创建的对象只能使用父类中的属性和方法,而不能使用子类中的属性和方法。
否则会产生报错信息。
在子类中添加方法
类中还可以添加新的方法,但在子类中新创建的方法无法在父类中使用,而父类中创建的方法可以在子类中使用。
class New_Microwave (Microwave):
definit__(self,name,light):
super()._init_(name)
self.light = light
def set light(self,add_light):
self.light=self.light+add_light
print("当前灯光强度:",self.light)
pass
第6行代码创建了一个新的方法,在子类中创建方法的形式与在类中创建方法的形式基本相同,此处新增的set_light()方法用于实现模拟调整灯光强度,当需要增加灯光强度时会传递数据给形参addlight,并且执行set_light()方法中的代码块。
set_light()方法是在子类New_Microwave中创建的,因此通过类New_Microwave创建的对象可以使用set_light()方法,而通过类Microwave创建的对象无法使用set_light()方法.
示例代码(使用类创建对象):
a=New Microwave('zhangsan',100)
a.set light(50)
b= Microwave('zhangsan')
b.set light(50)
第1、2行代码通过子类New_Microwave创建了对象a,且传递了参数"zhangsan',100。由于子类NewMicrowave中有set_light()方法,因此第1、2行代码可以正常执行,即能实现调整微波炉灯光强度。
由于父类Microwave中并没有set_light()方法,也没有从任何地方继承此方法,因此程序在执行第4行代码时会出现异常报错。
代码执行结果:
当前灯光强度:150
Traceback(most recent call last):
File"E:/书代码/第6章/第6章第8个程序,py",line 26,in<module>
b.set light(50)
AttributeError:Microwave' object has no attribute 'set light'
覆盖父类中的方法
当需要对父类中的方法进行修改、调整时,可以通过子类重新编写父类中的方法。在执行子类中的方法时会自动覆盖父类中的相应方法。
class New Microwave(Microwave):
def__init__(self,name,light):
super().__init__(name)
self.light = light
def print info(self):
print('微波炉的名字:',self.name,'\n',·购买时间:',self.time,'\n','当前灯光强独 :',self.light)
在子类New_Microwave中,第6行代码创建了一个名为print_info的方法,其代码块中增加了当前灯光强度属性。
在父类Microwave中也有print_info()方法,通过子类New_Microwave创建的对象会使用子类New_Microwave中的print_info()方法代码,而通过父类Microwave创建的对象会使用父类Microwav的print_info()方法代码。
导入其他文件中的类
当用户在开发项目时,往往会发现定义类的代码和使用类的代码不在同一个文件中。现在我们主要介绍的内容是如何实现在一个文件中使用另一个文件中的类。
导入类
当需要在d.py文件使用c.py文件中的类Microwave时,其使用方法与前面导入其他模块中的函数的方法基本一致,且必须保证两个文件处在同一个文件夹内,否则将无法导入文件中的内容。
第1种,导入文件。import+文件名
第2种,导入文件中的指定类
例如:
from c import Microwave
a= Microwave('zhangsan')
a.print_info()
注意:当文件中存在多个类时,为避免因导入的类太多而导致名称冲突,可以选择导入指定类。
第3种,导入文件中的全部类
from c import *
a = Microwave('zhangsan')
a.print_info()
第4种,给导入的类设置别名
from c import Microwave as Mw
a=Mw('zhangsan')
a.print_info()
在类中使用另一个类的方法
如果在定义一个类时需要使用到另一个类中的方法,可以参考前面创建类对象和使用类方法的步骤。
import time
import b
class Microwave():
def_init(self,name):
self .name=name
self.time=time.strftime("gY-名m-名d 名H:号M:8$",time.localtime())
def print info(self):
print(’微波炉的名字:',self.name,'\n','购买时间:',self.time)
def bread(self, temp=3):
self.temp = temp
print(”开始烤面包,时长:",self.temp,'分钟')
pass
def con_bluetooth(self, yorn):
bluetooth = b.Bluetooth(yorn)
bluetooth.con()
总之,当需要在类a中使用另一个类b中的方法时,是通过在类a中创建类b的实例化对象,再调用类b实例化对象中的方法来实现的。