zoukankan      html  css  js  c++  java
  • python 内置方法

    1.__getattr__:访问不存在的成员

    2.__getattribute__:访问成员的时候默认调用该函数,而一般不会调用__getattr__,只有出现异常,才会转到__getattr__处理。如果要重写该函数,不要使用return self.__dict__[name] ,会造成死循环

    3.__setattr__:将等式右边的值赋予左边的成员,调用该方法。

    4.__get__:描述符必选,(描述符,存在类的__dict__中的属性)如果类的属性有__get__方法,则该属性的值为__get__返回值;def __get__(self, instance, owner),t.d,,T.d,都调用__get__(self, instance, owner),前者intance为t,owner为T,后者instance为None,owner为T

    5.__set__:描述符可选,t.d = value,实际上调用d.__set__(t, value),T.d = value,这是真正的赋值,T.d的值从此变成value。d不再是描述符,而是value;如果描述符没有__set__函数,则赋值也是直接赋值。

    6.__delete__:描述符可选,与设置类似

    7.__getitem__:可以像list一样使用下标取得元素

    8.abc模块:提供抽象类,设定那些类函数必须实现,也可以通过 __subclasshook__方法来实现虚拟方法的检查

      

    备注:

    python属性查找策略

    1.如果attr是一个Python自动产生的属性,找到!(优先级非常高!)

    2.查找obj.__class__.__dict__,如果attr存在并且是data descriptor,返回data descriptor的__get__方法的结果,如果没有继续在obj.__class__的父类以及祖先类中寻找data descriptor

    3.在obj.__dict__中查找,这一步分两种情况,第一种情况是obj是一个普通实例,找到就直接返回,找不到进行下一步。第二种情况是obj是 一个类,依次在obj和它的父类、祖先类的__dict__中查找,如果找到一个descriptor就返回descriptor的__get__方法的 结果,否则直接返回attr。如果没有找到,进行下一步。

    4.在obj.__class__.__dict__中查找,如果找到了一个descriptor(插一句:这里的descriptor一定是non- data descriptor,如果它是data descriptor,第二步就找到它了)descriptor的__get__方法的结果。如果找到一个普通属性,直接返回属性值。如果没找到,进行下 一步。

    5.很不幸,Python终于受不了。在这一步,它raise AttributeError

    对属性赋值时的查找策略 ,对于obj.attr = value

    1.查找obj.__class__.__dict__,如果attr存在并且是一个data descriptor,调用attr的__set__方法,结束。如果不存在,会继续到obj.__class__的父类和祖先类中查找,找到 data descriptor则调用其__set__方法。没找到则进入下一步。

    2.直接在obj.__dict__中加入obj.__dict__['attr'] = value

  • 相关阅读:
    ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码
    ZeroMQ接口函数之 :zmq_init
    ZeroMQ接口函数之 :zmq_errno – 返回errno的值给调用此函数的线程
    ZeroMQ接口函数之 :zmq_disconnect
    ZeroMQ接口函数之 :zmq_curve_keypair
    ZeroMQ接口函数之 :zmq_curve – 安全的认证方式和保密方式
    ZeroMQ接口函数之 :zmq_ctx_term
    ZeroMQ接口函数之 :zmq_socket_monitor
    ZeroMQ接口函数之 :zmq_ctx_shutdown
    ZeroMQ接口函数之 :zmq_ctx_set
  • 原文地址:https://www.cnblogs.com/yasmi/p/5542633.html
Copyright © 2011-2022 走看看