028-86261949

当前位置:首页 > 技术交流 > Python自动化测试常见面试题(四)

Python自动化测试常见面试题(四)

2019/08/21 15:25 分类: 技术交流 浏览:1

 

一、_ init _ _ 和 _ _ new _ _是什么?

 

1.1、概述

在python的面向对象中,利用new方法创建对象,然后把这个创建的对象传递到init函数中,以第一个参数进

 

1.2、详细描述

__new__

  1. 所有的类上都有一个new方法
  2. 调用时机: 新建对象的时候自动调用(init之前),同时会自动传入类cls参数
  3. 作用: 改变对象空间的创建过程

 

  1. class Person(object):  
  2.     def __new__(cls):  
  3.         print("__new__方法被调用")  
  4.         # 必须返回创建的对象  
  5.         # print(cls)  
  6.         #return object.__new__(cls) #父类上的__new__方法能够实现内存空间的开辟  
  7.         return super().__new__(cls) #父类上的__new__方法能够实现内存空间的开辟  
  8.   
  9.     def __init__(self):  
  10.         print("__init__方法被调用")  
  11. # 创建对象  
  12. zhangsan = Person()  
  13.  

__init___

  1. 定义在类中, 名字固定 init
  2. 执行时机: 实例化对象的时候自动调用执行
  3. 作用: 一般会在初始化方法中 为对象添加(绑定)属性

 

  1. class Student(object):  
  2.     # 属性  
  3.     # 方法  
  4.     ## 自己定义一个初始化方法  
  5.     def __init__(self,_name,_age):  
  6.         # 输出  
  7.         print("我自动被调用")  
  8.         # 添加属性  
  9.         # self.name = "张三"  
  10.         # self.age = 26  
  11.         self.name = _name  
  12.         self.age = _age  
  13.   
  14.     def learn(self):  
  15.         print("努力学习,天天向上")  
  16.   
  17. # 实例化对象  
  18. stu1 = Student(_age=28,_name="李四")  

 

1.3、应用场景

所谓单例就是一个类从始至终只能产生一个实例。

  1. class Singleton(object):  
  2.     __instance = None #私有类属性,保存创建的对象空间  
  3.     __isInit = False # 是否已经初始化  
  4.     def __new__(cls, *args, **kwargs):  
  5.         # 实现自己对象的创建过程  
  6.         if not cls.__instance:  
  7.             # 没有就创建  
  8.             cls.__instance = super().__new__(cls)  
  9.             # 返回  
  10.             return cls.__instance  
  11.         else:  
  12.             # 有直接返回  
  13.             return cls.__instance  
  14.   
  15.     def __init__(self,name,age):  
  16.         if not self.__isInit: #没有初始化  
  17.             # 初始化  
  18.             self.name = name  
  19.             self.age = age  
  20.             # 改变  
  21.             self.__isInit = True  
  22.         else:  
  23.             #  
  24.             pass  

 

二、什么是pass,什么是lambda函数

 

2.1、概述

  1. lambda 创建匿名函数的语法。
  2. pass 空语句。

 

2.2、详细描述

​1、pass的作用

不做任何事情,一般用做占位语句,为了保证程序的完整性。

 

2、lambda

lambda只是一个表达式,函数体比def简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

  1. # 可写函数说明  
  2. sum = lambda arg1, arg2: arg1 + arg2;  
  3.    
  4. # 调用sum函数  
  5. print "相加后的值为 : ", sum( 10, 20 )  
  6. print "相加后的值为 : ", sum( 20, 20 )  

 

2.3、应用场景

 

lambda创建的匿名函数一般在 排序,map,reduce,filter这些高阶函数里,可以一行写完,不过这个也要看情况,过多使用匿名函 数,在团队代码阅读上,可能会有麻烦。

  1. >>>def square(x) :            # 计算平方数  
  2. ...     return x ** 2  
  3. ...   
  4. >>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方  
  5.   
  6.   
  7. >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数  
  8. [1, 4, 9, 16, 25]  
  9.    
  10. # 提供了两个列表,对相同位置的列表数据进行相加  
  11. >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])  
  12. [3, 7, 11, 15, 19]  
  13.   
  14.   
  15.   
  16.   
  17.   
  18. # 过滤出列表中的所有奇数:  
  19.   
  20. newlist = filter(lambda x:x % 2 == 1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])  
  21. print(newlist)  

 

 

 

三、is和==有什么区别?

 

3.1、概述

is 比较 的是两个实例对象是不是同一个对象,也就是说这两个对象的地址,通过id()函数可以获取,是不是相同。

== 比较的是两个实例对象的值是否相等,比较的是内存中存放的内容,可以不是同一个对象,只要内容一样就可以了。

 

3.2、详细描述

  1. x = [1, 2, 3]  
  2. y = x  
  3. z = [1, 2, 3]    
  4. print(x == y)  
  5. print(x is y)  
  6. print(x == z)  
  7. print(x is z)  
  8.   
  9.   
  10. 结果:  
  11.   
  12. True  
  13. True  
  14. True  
  15. False  

 

3.3、应用场景

is常用的地方是: 和None值进行比较 a is None 或者 a is not None

None 在 Python 语言中是一个单例对象,如果你要判断某个变量是否为 None 时,记得使用 is而不是 ==,因为只有 is才能在严格意义上表示某个变量是否是 None

#标签:Python,自动化测试,自动化测试面试