zoukankan      html  css  js  c++  java
  • 【python】类的特殊成员方法<1>

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

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

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

    """
    mymodule
    """
    class C:
    
        def __init__(self):
            self.name = 'paul'
    
    """
    -------
    """
    from mymodule.lib import C
    
    obj = C()
    print (obj.__module__)  # 输出 lib.aa,即:输出模块
    #>>>>mymodule.lib

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

    """
    mymodule
    """
    class C:
    
        def __init__(self):
            self.name = 'paul'
    
    """
    -------
    """
    from mymodule.lib import C
    
    obj = C()
    print (obj.__class__)     # 输出 lib.aa.C,即:输出类
    #>>><class 'mymodule.lib.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__:对象后面加括号,触发执行

    class Foo:
    
        def __init__(self):
            pass
    
        def __call__(self, *args, **kwargs):
            print('__call__')
    
    
    obj = Foo()  # 执行 __init__
    obj()  # 执行 __call__
    #>>>__call__
    class ClassA(object):
        def __new__(cls, *args, **kwargs):
            object = super(ClassA, cls).__new__(cls)
            print("HHHA:0===>")
            return object
    
        def __init__(self, *args, **kwargs):
            print("HHHB:0===>")
    
        def __call__(self, func):
            print("HHHC:0===>")
            return func
    
    
    A = ClassA()
    print("HHHH:0====>")
    @ClassA()
    def hello():
        print("HHHC:0===>hello")
    print("HHHH:1====>")
    hello()
    
    #>>>HHHA:0===>
    #>>>HHHB:0===>
    #>>>HHHH:0====>
    #>>>HHHA:0===>
    #>>>HHHB:0===>
    #>>>HHHC:0===>
    #>>>HHHH:1====>
    #>>>HHHC:0===>hello
    

      

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

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

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

    class Foo:
    
        def __str__(self):
            return 'paul'
    
    
    obj = Foo()
    print(obj)
    #>>>paul
    

    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__
    #>>>__getitem__ k1
    obj['k2'] = 'alex'  # 自动触发执行 __setitem__
    #>>>__setitem__ k2 alex
    del obj['k1']   
    #>>>__delitem__ k1
    

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

     11.__len__,使用 len(object) 触发

    class Foo:
        def __init__(self, name):
            self.name = name
    
        def __len__(self):
            return 10    # 注意返回结果必须是 int 类型
    
    
    f = Foo('hkey')
    print(len(f))
    #>>>10
    

    12.__hash__,调用 hash(object) 触发

    class Foo:
        def __init__(self):
            self.a = 1
            self.b = 5
    
        def __hash__(self):
            return hash(str(self.a) + str(self.b))
    
    
    f = Foo()
    print(hash(f))
    #>>>-3542141893081931293
    

    13.__eq__,当两个对象进行比较时,触发

    class Foo:
        def __init__(self):
            self.a = 1
            self.b = 5
    
        def __eq__(self, other):
            if self.a == other.a and self.b == other.b:
                return True
            return False
    
    a = Foo()
    b = Foo()
    print(a == b)   # 执行这个比较的时候,就调用了 __eq__ 方法
    #>>>True
    

      

  • 相关阅读:
    关于HTTP协议,一篇就够了
    jvm在什么情况下会执行GC
    为什么我们做分布式使用Redis?
    linux入门系列
    linux学习笔记-13.进程控制
    linux学习笔记-12.输入输出重定向及管道
    app获取自己的签名
    安卓给微信公众号发消息
    微信扫码下载apk
    设备通道开启关闭状态
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/12323877.html
Copyright © 2011-2022 走看看