常见的python自动化测试的面试题目

1. 对函数传参为可变型数据类型 进行改进

1
2
3
4
5
6
7
def add(ele,mylist=[]):
mylist.append(ele)
return mylist

print(add(4))
print(add(5))
print(add(6))

运行结果如下图:
代码结果图


  1. 解决方法一:(最简单的方法,但是代码有点冗余)

    1
    2
    3
    4
    5
    6
    7
      def add(ele,mylist=[]):
    mylist.append(ele)
    return mylist

    print(add(4,[]))
    print(add(5,[]))
    print(add(6,[]))
  2. 解决方法二:(推荐使用)

    1
    2
    3
    4
    5
    6
    7
    8
    9
      def add(ele,mylist=[]):
    if not mylist:
    mylist=[]
    mylist.append(ele)
    return mylist

    print(add(4))
    print(add(5))
    print(add(6))
  3. 解决方法三:(将默认参数修改为 不可变的类型)

    1
    2
    3
    4
    5
    6
    7
    def add(ele,mylist=None):
    mylist.append(ele)
    return mylist

    print(add(4))
    print(add(5))
    print(add(6))

2. 简述方法中__init__() 与__new__()的区别?

  1. 方法__new__()的特性
    1.1 __new__()用于创建实例,在实例创建之前调用,类级别的方法,是个静态方法
    1.2 __new__()至少有个参数cls,代表当前类,在实例化时由python解释器自动识别
    1.3 __new__()必须要返回值,返回实例对象

  2. 方法__init__()的特性
    2.1 __init__()用于初始化实例,在实例对象创建后被调用,对象级别的方法,用于设置对象的一些初始值
    2.2 __init__()至少有一个参数self,它是new()返回的实例,init()是在new()的基础上完成数据的初始化操作
    2.3 __init__()不需要返回值

  3. __new__()的作用
    3.1 __new__() 用来继承一些不可变的class(比如:int,str,tuple)提供一个自定义类的实例化过程的途径

    1
    2
    3
    class 子类名(int):
    def __new__(cls,value):
    return super(子类类名,cls).__new__(cls,abs(value))

    3.2 __new__()实现单例模式(每次初始化时只返回一个对象)

    1
    2
    3
    4
    def __new__(cls):
    if not hasattr(cls,'instance'):
    cls.instance = super(子类类名,cls).__new__(cls)
    return cls.instance