• python ,面相对象的特殊成员及相关内置函数


    isinstance(obj,cls)检查是否obj是类cls的对象

    class A: pass
    
    class B(A): pass
    
    abj = B()
    print(isinstance(abj,B))  #True
    print(isinstance(abj,A))  #True
    
    示例
    

    issubclass(sub, super)检查sub类是否是 super 类的派生类

    class A: pass
    
    class B(A): pass
    
    abj = B()
    
    print(issubclass(B,A)) #True
    
    示例
    

      

     __len__

    class A:
        def __init__(self):
            self.a = 1
            self.b = 2
    
        def __len__(self):
            return len(self.__dict__)
    a = A()
    print(len(a))
    

     __hash__

     

    class A:
        def __init__(self):
            self.a = 1
            self.b = 2
    
        def __hash__(self):
            return hash(str(self.a)+str(self.b))
    a = A()
    print(hash(a))
    

      __str__

    class A:
        def __init__(self):
            pass
        def __str__(self):
            return '太白'
    a = A()
    print(a)
    print('%s' % a)
    

      __repr__

    class A:
        def __init__(self):
            pass
        def __repr__(self):
            return '太白'
    a = A()
    print(repr(a))
    print('%r'%a)
    

      __call__

    class Foo:
    
        def __init__(self):
            pass
        
        def __call__(self, *args, **kwargs):
    
            print('__call__')
    
    
    obj = Foo() # 执行 __init__
    obj()       # 执行 __call__
    

      __eq__

    class A:
        def __init__(self):
            self.a = 1
            self.b = 2
    
        def __eq__(self,obj):
            if  self.a == obj.a and self.b == obj.b:
                return True
    a = A()
    b = A()
    print(a == b)
    

      __del__

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

    注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

     python垃圾回收机制
    # :文件中你创建的所有的变量,类等等.执行完毕之后,
    # 一段时间内如果没有用到, 他会自动在内存中去除.
    # 深入研究: 他会将你的所有变量,类等等做个标记,在一段时间之内,没有被调用,则就会自动回收.
    
    # __del__  析构方法
    
    # class A:
    #     def __init__(self):
    #         pass
    #     def __del__(self):
    #         print(666)
    # a1 = A()
    

      __new__

    class A:
        def __init__(self):
            self.x = 1
            print('in init function')
        def __new__(cls, *args, **kwargs):
            print('in new function')
            return object.__new__(A, *args, **kwargs)
    
    a = A()
    print(a.x)
    

      单例模式

    class A:
        __instance = None
        def __new__(cls, *args, **kwargs):
            if cls.__instance is None:
                obj = object.__new__(cls)
                cls.__instance = obj
            return cls.__instance
    
    单例模式
    

     item模式__getitem__   __setitem__  __delitem__   __delattr__

    class Foo:
        def __init__(self,name):
            self.name=name
    
        def __getitem__(self, item):
            print(self.__dict__[item])
    
        def __setitem__(self, key, value):
            self.__dict__[key]=value
        def __delitem__(self, key):
            print('del obj[key]时,我执行')
            self.__dict__.pop(key)
        def __delattr__(self, item):
            print('del obj.key时,我执行')
            self.__dict__.pop(item)
    
    f1=Foo('sb')
    f1['age']=18
    f1['age1']=19
    del f1.age1
    del f1['age']
    f1['name']='alex'
    print(f1.__dict__)
    

      

      

  • 相关阅读:
    AC自动机学习笔记(模板)
    codeforces1328E
    Codeforces 1288E- Messenger Simulator (树状数组)
    线性基小记
    HDU3949
    矩阵快速幂小记
    5E
    5D
    5C
    5B
  • 原文地址:https://www.cnblogs.com/lnrick/p/9264871.html
Copyright © 2020-2023  润新知