• Python 类的特殊成员方法


     
    类的特殊成员方法

    1.__doc__ :打印类的描述信息

    class Foo:
        """ 描述类信息,这是用于看片的神奇 """
     
        def func(self):
            pass
     
    print Foo.__doc__
    #输出:类的描述信息

    2.__module__:表示当前操作的对象在那个模块

    class C:
    
        def __init__(self):
            self.name = 'wupeiqi'

    3.__class__表示当前操作的对象的类是什么

    from lib.aa import C
    
    obj = C()
    print obj.__module__  # 输出 lib.aa,即:输出模块
    print obj.__class__      # 输出 lib.aa.C,即:输出类

    4. __init__ :构造方法,通过类创建对象时,自动触发执行

    class Role(object):    
    #初始化函数,在生成一个角色时要    初始化的一些属性就填写在这里    
        def __init__(self,name,role,weapon,life_value=100,money=15000):
            
    #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释
    self.name = name
            self.role = role

    5.__del__:析构方法,当对象在内存中被释放时,自动触发执行

    class Role(object):
        def __init__(self,name,role,weapon:
            self.name = name
            self.role = role
            self.weapon = weapon
    
        def __del__(self):             #析构函数
            print("del.....run...")
    r1 = Role('Alex','police','AK47')    #生成一个角色

    6.__call__:对象后面加括号,触发执行

    #注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
    class Foo:
     
        def __init__(self):
            pass
         
        def __call__(self, *args, **kwargs):
     
            print '__call__'
     
    obj = Foo() # 执行 __init__
    obj()       # 执行 __call__
    class _Getch:
        def __init__(self):
            self.impl = _GetchUnix()
            
        def __call__(self): return self.impl()
    巧妙用法1

    7.__dict__:查看类或对象中的所有成员

    print(类.__dict__) # 打印类里所有属性,不包括实例属性
    print(实例.__dict__) #打印实例所有属性,不包括类属性

    8.__str__:如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值

    class Foo:
     
        def __str__(self):
            return 'alex li'
     
    obj = Foo()
    print obj
    # 输出:alex li

    9.__getitem____setitem____delitem__:

    注:用于索引操作,如字典。以上分别表示获取、设置、删除数据

    class Foo(object):
     
        def __getitem__(self, key):
            print('__getitem__',key)
     
        def __setitem__(self, key, value):
            print('__setitem__',key,value)
     
        def __delitem__(self, key):
            print('__delitem__',key)
    
    obj = Foo()
     
    result = obj['k1']      # 自动触发执行 __getitem__
    obj['k2'] = 'alex'   # 自动触发执行 __setitem__
    del obj['k1']   

    10.__new__\__metaclass__ *(自定义类)

    __new__:是用来创建实例的,对类实例化之前进行定制,可以用到。

    __metaclass__:定义一个类如何被创建

    类的生成 调用 顺序依次是 __new__ --> __init__ --> __call__

    #创建类特殊方式
    def func(self):
        print(self.name,self.age)
    
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    #通过Type实例化产生的Foo类,Foo是Type的对象。
    #(object,)加入“,”是为了让括号知道他是个元组。
    #type第一个参数:类名
    #type第二个参数:当前类的基类
    #type第三个参数:类的成员
    Foo = type('Foo',(object,),{'talk':func,
                                '__init__':__init__})
    
    f= Foo("Chrn",22)
    f.talk()
    print(type(Foo))
    #Type 为 类的类,所有类都是Type创建的

     metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那个答案写的非常好。

  • 相关阅读:
    需求的有序化和方案的系统化
    产品 增长 口碑传播
    私域流量的价值 大悦城微信营销:14万微信会员哪来的
    产品创新阶段关口细则
    业务关键数据指标
    TOB 增长
    医美品零售门店分析
    数据赋能饮品轻食
    [已读]你不知道的JavaScript(上卷)
    [已读]移动web手册
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7827021.html
Copyright © 2020-2023  润新知