zoukankan      html  css  js  c++  java
  • python 类的常见的特殊成员

    # 类的特殊成员
    class gg:
        '''
        这里都是特殊类成员方法,在触发后这些方法都根据这些方法自动传递的参数就行代码的编写
        '''
        #print(gg.__doc__)  # 查看类的描述信息
        def __init__(self,name):  #初始化对象  #类名() 创建对象的时候自动创建
            self.name = name
            self.data = {'key':'cisco'}#定义一个类中的字典
    
        def __call__(self, *args, **kwargs):  #触发执行,使用  对象() 就会自动执行该方法的内容
            print('call 触发后执行这里的代码')
    
    
        def __getitem__(self, item):# 使用对象['key'] 后自动调用, 会将'key' 的值传到item
            print('随你喜欢,你可以对传递过来的值任意蹂躏')
            return self.data[item]
    
        def __setitem__(self, key, value): #对象['key'] = 'value'  后会自动调用,像字典一样传值到对应的参数中
            print(key,value ,'进行自由的代码操作的,拿到这两个值之后可以随便操作')
            self.data[key] = value
    
        def __delitem__(self, key):# 像字典一样,使用del 对象['key']  会自动执行
            print('我是%s,如果喜欢可以按照字典的方式对类的key进行删除如下:'%key)
            del self.data[key]
    
    
    
        def __enter__(self): #使用with 对象 + as b 的时候 自动调用
            print('进来了,自动执行后的随意代码区,可以随便编写')
    
        def __exit__(self, exc_type, exc_val, exc_tb):#使用with 对象 + as b 的时候 自动调用
            print('出去了,自动执行后的随意代码区,可以随便编写')
    
        def __add__(self, other):  # 两个对象相加的的时候进行调用
            print('自动执行后的随意代码区,可以随便编写')
    
        def __str__(self): #在对应对象的时候调用并返回相应的return后面的 内容 通过打印调用 也可以使用str(对象)
            print('自动执行后的随意代码区,可以随便编写')
            return '打印对象的时候就将这里的内容进行返回'
    
        def __repr__(self): #转化为解析器读取的形式, 调用时repr(对象)
            pass
    
        def __hash__(self):#设置本对象的hash 的功能,如果直接在对象的后面添加__hash__ = None 的话,该对象不能被进行哈希
            return '可以给自己定义的对象设置可以hash的功能'
    
        def __new__(cls, *args, **kwargs):#构造方法__new__ 开辟内存,触发 __init__创建实例
            return object.__new__(cls)
    
        def __cmp__(self,x): #对象比较  调用方法  cmp(对象,x)
            pass
    
        def __del__(self): #析构方法:当对象在内存中被释放时,自动触发执行  del  对象
            pass
    
    a = gg('panzhenwei') #  触发__new__ __init__
    print(gg.__module__) # 查看当前操作的模块是哪个
    print(gg.__class__)  #查看当前操作的类是哪个
    print(gg.__dict__)  # 查看类或对象的成员,类只是打印类的成员不打印对象的成员
    print(a.__dict__) #  查看类或对象的成员,对象只对应对象的成员,不打印类的成员
    print(a ) #触发__str__
    a()  # 触发__call__
    
    a['name'] = 'cisco'# 触发__setitem__
    a['name']           # 触发__getitem__
    del a['name']    #  触发__delitem
    
    with a as f:  # 自动触发__enter__ 和__exit__
        print('打印这里的时候已经触发了__enter__')
    print('代码执行到这里,说明已经退出了上面的句柄,已经触发完__exit__')
    
    
    # 来自菜鸟编程的示例
    class Vector:
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        def __str__(self):
            return 'Vector (%d, %d)' % (self.a, self.b)
    
        def __add__(self, other):
            return Vector(self.a + other.a, self.b + other.b)
    
    v1 = Vector(2, 10)# 触发__new__ __init__
    v2 = Vector(5, -2)# 触发__new__ __init__
    print(v1 + v2) # 触发__add__, 触发__new__ __init__   触发__str__

    #结果 Vector(7,8) #这个是字符串
  • 相关阅读:
    C++为什么不可以把一个数组直接赋值给另一个数组
    Eigen 矩阵库学习笔记
    HTTP请求报文和HTTP响应报文
    剔除三个(包括三个以上)的子串
    c语言实现:4和7幸运数字的题
    oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
    oracle的控制语句if和循环语句loop while for
    oracle函数、包、变量的定义和使用、重点”结构体和数组”
    oracle pl/sql简介、块、过程
    oracle角色
  • 原文地址:https://www.cnblogs.com/vivi0403/p/9931991.html
Copyright © 2011-2022 走看看