pycharm测试用例,用python实现自动化测试用例

  pycharm测试用例,用python实现自动化测试用例

  一般来说,描述符是一个具有“绑定行为”的对象属性,它的访问控制被描述符的协议方法覆盖。这些方法是__get__(,__set__)和__delete__)。具有这些方法的对象称为描述符。

  默认属性的访问控制是从对象的字典(__dict__)中获取(get)、设置(set)和删除(delete)。比如a.x的搜索顺序是a.__dict__[x],然后是(a)类型的元类。_ _ dict _ [x],a)类型的父类。请注意,描述符只在新类中有效。(新类是从类型或对象继承的类。)

  描述符功能强大,应用广泛。描述符是属性、实例方法、静态方法、类方法和super背后的实现机制。Python本身广泛使用描述符来实现Python 2.2中引入的新类。描述符简化了底层C代码,为Python的日常编程提供了一套灵活的新工具。

  描述。__get__(self,obj,type=None ) - value

  描述。__get__(self,obj,value ) -无

  描述。__delete__(self,obj ) -无

  如果对象是一个描述符,那么当它被当作对象的一个属性时,默认的搜索行为将被覆盖。

  如果一个对象同时定义了__get__和__set__的话,它就被称为数据描述符。只定义__get__的描述符称为非数据描述符。

  数据描述符和非数据描述符的区别在于相对于实例字典的优先级。如果实例的字典中存在与描述符同名的属性,如果描述符是数据描述符,则数据描述符优先。对于非数据描述符,字典属性优先。类别(对象):

  def __init__(self):

  self.name=mink

  def __get__(self,obj,objtype=None):

  返回自己的名字

  a类(对象):

  name=B()

  a=A())).

  A._ _ dict _ _ # print {}

  印花貂皮大衣

  名称=kk

  普林塔。_ _ dict _ # print { name : kk }

  打印a.name #打印kk

  其中b是非数据描述符,所以在a.name=kk 的情况下,a.__dict__有name属性,然后输入_ _ set _ _ def _ _()

  self.name=值。做某事

  a=A())).

  A._ _ dict _ _ # print {}

  印花貂皮大衣

  名称=kk

  A._ _ dict _ _ # print {}

  打印a.name #打印kk

  A.__dict__为空,因为数据描述符访问属性的优先级高于实例的字典。

  呼叫描述符

  描述符可以这样直接调用。d.__get__(obj)

  但是,在访问属性时,描述符通常会被自动调用。比如obj.d在obj的字典里找d。如果D定义了__get__方法,则根据以下优先级规则调用d.__get__(obj):

  调用的细节取决于obj是一个类还是一个实例。此外,描述符只对新类型的对象和类有效。由object继承的类称为新类型。

  为此,方法对象的实现。__getattribute__()是将b.x转换为类型(b)。_dict_[x]。_get__,type) b)完整的C语言实现可以在Objects/object.c的PyObject_GenericGetAttr()中找到

  对于类,方法类型。__getattribute__()将B.x设置为b. _ _ dict _ [x]。_ _ get _ _(无,b)

  ) 。Python将其描述为:def __getattribute__(self,key):

  在Objects/typeobject.c 中模拟type_getattro()

  v=对象。__getattribute__(self,key)

  if hasattr(v, __get__ ):

  return v.__get__(None,self)

  返回v

  要点:调用描述符是因为__getattribute__()重写了__getattribute__()方法,以防止普通描述符调用__getattribute__()。对象。_ _ getattribute _()和类型。_ _ getattribute _()仅适用于新类的实例。非数据描述符可能会被实例字典覆盖。(非数据描述符不如实例字典首选)super()返回的对象也有一个自定义__getattribute__()方法来调用描述符。当super(B,obj)。m()时,B旁边的基类A将在obj中找到。__class__。__mro__,然后是a. _ _ dict _ [m]。_ _ get _ _ (obj,a)将被返回。如果它不是一个描述符,它返回m。如果在实例字典中找不到M,就会继续调用object。__getattribute__()进行查找。(译者注:即在__mro__)的下一个基类中查找)

  注意:在Python 2.2中,如果m是描述符,super(B,obj)。m()只会调用方法__get__()。在Python 2.3中,也会调用非数据描述符(除非是老式的类)。super_getattro()的实现细节是:Objects/typeobject.c,[del]达利鸭教程[/del]中实现了一个等价的Python。

  上面显示了描述符的机制是在object、type和super的__getattribute__()方法中实现的。从object派生的类自动继承这种机制,或者它们有一个具有类似机制的元类。同样,您可以重写类的__getattribute__()方法来关闭该类的描述符行为。

  描述符示例

  在下面的代码中定义了一个数据描述符,它在每次get和set时打印一条消息。重写__getattribute__()是使所有属性都具有这种行为的另一种方法。然而,描述符在监控特定属性时非常有用。类RevealAccess(对象):

  设置和返回值的数据描述符

  并打印一条消息记录他们的访问。

  def __init__(self,initval=None,name=var ):

  self.val=initval

  self.name=name

  def __get__(self,obj,objtype):

  打印“检索”,自我名称

  返回self.val

  def __set__(self,obj,val):

  打印更新,自我名称

  self.val=val

  类MyClass(对象):

  x=RevealAccess(10, var x )

  y=5

  m=MyClass()

  m.x

  正在检索变量“x”

  10

  m.x=20

  更新变量“x”

  m.x

  正在检索变量“x”

  20

  m.y

  五

  这个协议非常简单,提供了令人兴奋的可能性。有些用途非常普遍,以至于被打包成独立的函数。属性、方法(绑定和未绑定方法)、静态方法和类方法都基于描述符协议。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • android自动化测试框架有哪些,ios手机自动化测试工具,Android和iOS 测试五个最好的开源自动化工具
  • ,,如何使用IOS自动化测试工具UIAutomation
  • android自动化测试框架有哪些,ios手机自动化测试工具
  • ,,Python自动化测试框架pytest的详解安装与运行
  • ,,python自动化测试之DDT数据驱动的实现代码
  • selenium+java自动化测试框架,selenium自动化测试pdf
  • java自动化测试框架,java 自动化测试工具
  • 接口自动化测试面试问题,关于接口测试面试题
  • 自动化测试工具可以用在哪种测试过程中,测试自动化工具有哪些
  • airtest和appium自动化测试,airtest全自动脚本
  • 测试自动化面试问题及答案,自动化测试面试题及答案大全(3)
  • 自动化测试框架是什么,什么叫自动化测试框架
  • python+selenium自动化测试框架搭建,selenium自动化测试环境搭建
  • 接口测试与接口自动化测试,接口自动化测试项目实战
  • appium自动化测试环境搭建,python appium自动化测试框架
  • 留言与评论(共有 条评论)
       
    验证码: