• 关于类里的一些特殊成员


    类里的一些特殊成员

     1 class Foo(object):
     2 
     3     def __init__(self,a1,a2):
     4         self.a1 = a1
     5         self.a2 = a2
     6     
     7     def __call__(self, *args, **kwargs):
     8         print(11111,args,kwargs)
     9         return 123
    10 
    11     def __getitem__(self, item):
    12         print(item)
    13         return 8
    14 
    15     def __setitem__(self, key, value):
    16         print(key,value,111111111)
    17 
    18     def __delitem__(self, key):
    19         print(key)
    20 
    21     def __add__(self, other):
    22         return self.a1 + other.a2
    23 
    24     def __enter__(self):
    25         print('1111')
    26         return 999
    27 
    28     def __exit__(self, exc_type, exc_val, exc_tb):
    29         print('22222')

    关于特殊方法的执行方式
    1、类名 ()  自动执行 __init__

    2、对象 ()  自动执行 __call__ 有返回值

     ret=obj(6,4,2,k1=478)

    3、对象["xx"]  自动执行 __getitem__ 有返回值

    ret=obj["mm"]

    print(ret)

    4、对象["xx"] =124 自动执行 __setitem__

    obj['k1'] = 123  # "k1" 给key 传值,123给value传值

    5、del 对象[xx]       自动执行__delitem__

    del obj["xxx"]

    6、对象+对象      自动执行__add__

    obj1=Foo(1,2) 参数分别传给self other

    obj2=Foo(3,4)

    ret=obj1+obj2

    7、with 对象        自动执行 __enter__ / __exit__ 按顺序执行

    with obj as f:
         print(f)
         print('内部代码')

    #1111
    #999
    #内部代码
    #22222

    8、真正的构造方法

     1 class Foo(object):
     2     def __init__(self, a1, a2):     # 初始化方法
     3         """
     4         为空对象进行数据初始化
     5         :param a1:
     6         :param a2:
     7         """
     8         self.a1 = a1
     9         self.a2 = a2
    10 
    11     def __new__(cls, *args, **kwargs): # 构造方法
    12         """
    13         创建一个空对象
    14         :param args:
    15         :param kwargs:
    16         :return:
    17         """
    18         return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).
    19 
    20 obj1 = Foo(1,2)
    21 print(obj1)
    22 
    23 obj2 = Foo(11,12)
    24 print(obj2)
  • 相关阅读:
    jQuery核心函数——(一)
    ECMAScript——(二)
    JS简介——(一)
    jQuery动态给下拉列表添加一个选项(创建DOM对象)
    Ajax异步请求struts的JSON机制(省市区三级联动)
    struts2官方演示程序总结struts2-blank
    详解数据库之存储过程与错误处理
    使用jdk的socket通信
    hadoop深入研究:(五)——Archives
    解决删除Volume报错的问题
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/9555243.html
Copyright © 2020-2023  润新知