python中的类
类
基本定义
"""
定义类
规范: 类名一般首字母大写,多个英文单词,每个英文单词首字母大写
"""
class TestCase:
pass
类变量
class TestCase: # 定义类变量 testtitle = "" teststep = [] # 定义方法 def add_test_step(self,step): # 访问类变量 TestCase.teststep.append(step) # 实例化类 t1 = TestCase() print(t1.testtitle) # 访问实例变量 print(t1.teststep) # 访问方法 t1.add_test_step("打开浏览器") print(t1.teststep)
使用类变量定义数据的时候会有一些问题
使用类变量定义数据的时候会有一些问题 class TestCase: # 定义类变量 testtitle = "" teststep = [] # 定义方法 def add_test_step(self,step): # 访问类变量 TestCase.teststep.append(step) def remove_test_step(self,index): TestCase.teststep.pop(index) # 实例化类 t1 = TestCase() #创建测试用例 t1.testtitle = "用户注册" t1.add_test_step("打开浏览器") t1.add_test_step("输入url") t2 = TestCase() t2.testtitle = "用户登录" t2.add_test_step("到达登录页面") t2.add_test_step("输入数据") print(t1.testtitle,t1.teststep) print(t2.testtitle,t2.teststep)
用户注册 ['打开浏览器', '输入url', '到达登录页面', '输入数据'] 用户登录 ['打开浏览器', '输入url', '到达登录页面', '输入数据']
所有的teststep 值都一样。注:使用类变量定义的时候会有一些问题,定义的类变量,所有实例化的对象都共享这个类变量,所以添加了构造器来解决这种问题
构造器
构造器:为每个实例化对象创建单独的变量。实例化一个类后,分配一块空间,如下图中t1,t2互不影响,原来的定义的类变量,类变量会共享,现在引入构造器这种方法,将一般变量都会放到init函数中,Self相当于实例对象本身,在类中无论构造器,还是方法中,都要用self,Init是一个类的构造器,还是特殊方法,可以加参数,也可以不加
注:每实例化一个对象,就在内存分配一块空间,拷贝类的属性和方法
class TestCase: # 类的构造器 特殊方法 def __init__(self): self.title_name="" # 实例变量 self.test_steps = [] def add_test_step(self,step): self.test_steps.append(step) # 实例化类 t1 = TestCase() t1.title_name = "用户注册" t1.add_test_step("打开浏览器") t1.add_test_step("到达首页") t2 = TestCase() t2.title_name = "用户登录" t2.add_test_step("打开注册页面") t2.add_test_step("输入注册数据") print(t1.title_name,t1.test_steps) print(t2.title_name,t2.test_steps)
注:以上是不传参数的构造器,在构造器中为每个实例化对象创建单独的 变量。每个实例化对象单独维护自己的变量。
所以上述代码执行结果为
用户注册 ['打开浏览器', '到达首页'] 用户登录 ['打开注册页面', '输入注册数据']
如果想再加一个变量,例如:等级level,则需要在init函数中添加一个变量,另外对于每个实例化对象,需要添加一行代码
class TestCase: # 类的构造器 特殊方法 def __init__(self): self.title_name="" # 实例变量 self.test_steps = [] self.level='' #添加的代码 def add_test_step(self,step): self.test_steps.append(step) # 实例化类 t1 = TestCase() t1.title_name = "用户注册" t1.level='高' #添加的代码 t1.add_test_step("打开浏览器") t1.add_test_step("到达首页") t2 = TestCase() t2.title_name = "用户登录" t2.level='中' #添加的代码 t2.add_test_step("打开注册页面") t2.add_test_step("输入注册数据") print(t1.title_name,t1.test_steps,t1.level) #修改的代码 print(t2.title_name,t2.test_steps,t2.level) #修改的代码
如果再需要加几个变量,就会更加麻烦,在init函数中,定义时可以传入参数,这样可以简化代码,更加方便
class TestCase: # 类的构造器 特殊方法 __init__ 定义的参数在实例化的时候 必须传入对应的参数 (类似于函数) def __init__(self,name,level): self.title_name=name # 实例变量 测试用例标题 self.test_level = level # 用例优先级 self.test_steps = [] # 测试步骤 def add_test_step(self,step): self.test_steps.append(step) def save_to_file(self,filename): """ 将用例名字,用例优先级,用例的操作步骤,保存到 指定的文件中 :param filename: 保存的文件路径 :return: """ # 实例化类 t1 = TestCase(name="用户注册",level="高") t1.add_test_step("打开浏览器") t1.add_test_step("到达首页") t2 = TestCase("用户登录","高") t2.add_test_step("打开注册页面") t2.add_test_step("输入注册数据") print(t1.title_name,t1.test_steps) print(t2.title_name,t2.test_steps)
class TestCase: # 类的构造器 特殊方法 __init__ 定义的参数在实例化的时候 必须传入对应的参数 (类似于函数) def __init__(self,name,level): self.title_name=name # 实例变量 测试用例标题 self.test_level = level # 用例优先级 self.test_steps = [] # 测试步骤 def add_test_step(self,step): self.test_steps.append(step) def save_to_file(self,filename): """ 将用例名字,用例优先级,用例的操作步骤,保存到 指定的文件中 :param filename: 保存的文件路径 :return: """ with open(filename,mode='w',encoding='utf8') as f: f.write(self.title_name+'\n') f.write(self.test_level+'\n') for step in self.test_steps: f.write(step+'\n') # 实例化类 t1 = TestCase(name="用户注册",level="高") t1.add_test_step("打开浏览器") t1.add_test_step("到达首页") # 保存到文件中 t1.save_to_file('./t1.txt') t2 = TestCase("用户登录","高") t2.add_test_step("打开注册页面") t2.add_test_step("输入注册数据") t2.save_to_file('./t2.txt')