特殊的双下方法

特殊的双下方法

  • 特殊的双下方法:原本是开发python这个语言的程序员用的,源码中使用的,我们不能轻易使用。慎用!

  • 双下方法:你不知道你干了什么就触发了某个双下方法
    # len 使用len() 触发
    class B:
    def init(self,name,age):
    self.name = name
    self.age = age

        def __len__(self):
            return len(self.__dict__)
    
    b = B('liye',28)
    print(len(b))
    
    # __hash__
    # __str__  必须return一个字符串类型   打印时触发print  打印对象触发  直接str转化也可以触发 
    
    # __repr__  str优先级高于repr
    print('我叫%s' % ('alex'))
    print('我叫%r' % ('alex'))
    print('我叫{}'.format('alex'))
    a = 'alex'
    print(f'我叫{a}')
    print(repr('ting'))
    
    # __call__  对象后面加括号,触发执行  这个对象从属于类(父类)的__call__方法
    # __eq__ 
    # __del__ 析构方法 当对象在内存中被释放时 自动触发执行
    # __new__  new一个对象  对象是object类的__new__方法 产生了一个对象  构造方法
    # 类名加括号先要触发object的__new__方法,object的__new__产生一个对象空间并返回给类名加括号,再触发__init__给对象封装属性 
    # 类名() 
    # 1. 先触发 object的__new__方法,此方法在内存中开辟一个对象空间
    # 2. 执行__init__方法,给对象封装属性
    # __init__ 不允许有return
    
    # 单例模式  python中的设计模式  方便对实例个数的控制
    # 一个类只允许实例化一个对象
    class A:
        __instance = None
    
        def __new__(cls, *args, **kwargs):
            if not cls.__instance:
                cls.__instance = object.__new__(cls)
                # return cls.__instance
            # else:
            #     return cls.__instance
            return cls.__instance
    
    obj = A()
    print(obj)
    obj1 = A()
    print(obj1)
    
posted @ 2022-03-02 08:11  寻月隐君  阅读(34)  评论(0编辑  收藏  举报