zoukankan      html  css  js  c++  java
  • 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 得票最高那个答案写的非常好。

  • 相关阅读:
    vs2017 vs2019 打开cs文件提示无法识别的GUID格式
    A股和B股票的区别?
    选股:“均线是水,K线是舟,量是马达!”的选美理念!
    什么是K线?K线的详解!
    5日均线MACD
    炒股的常见技术指标
    选股票几大原则:趋势原则,强势原则,分批原则
    金融蝴蝶效应
    股市里的大户和散户
    期货平仓/强制平仓/爆仓-股市平仓建仓
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7827021.html
Copyright © 2011-2022 走看看