• 面向对象~~~双下方法


    1. _len_

      class A:
          def __init__(self):
              self.a = 1
              self.b = 2
      
          def __len__(self):
              return len(self.__dict__)
      
      a = A()
      print(len(a)) # len 一个对象就会触发 __len__方法。
      
    2. _hash_

      class A:
          def __init__(self):
              self.a = 1
              self.b = 2
      
          def __len__(self):
              return hash(str(self.a)+str(self.b))
      
      a = A()
      print(hash(a)) # 获取哈希值
      
    3. __str__ (优先级高于__repr__) ***

      class A:
          def __init__(self,name,age):
              self.name = name
              self.age = age
      
          def __str__(self):
              return f'姓名:{self.name} 年龄:{self.age}'
      
      a = A('海狗',18)
      print(a) # 打印对象触发__str__方法
      
    4. _repr_

      用法和__str__类似,返回值是什么样就返回什么样(原形毕露)

    5. _eq_

      class A:
          def __init__(self):
              self.a = 1
              self.b = 2
      
          def __eq__(self, other):
              if self.a == other.a and self.b == other.b:
                  return True
      
      obj1 = A()
      obj2 = A()
      print(obj1 == obj2)
      
    6. _call_ ***

      class A:
          def __init__(self):
              pass
          def __call__(self, *args, **kwargs):
              print('我好帅')
      obj = A()
      obj()  # 对象() 自动触发对象从属于类(父类)的__call__方法
      
    7. _del_

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

    8. _new_ ***

      对象是object类的__new__方法 产生了一个对象.

      实例化对象时 先触发 object 的__new__方法,此方法在内存中开辟一个对象空间.再执行__init__方法,给对象封装属性.

      单例模式: (节约系统资源)

      class A:
          __instance = None
          def __init__(self,name):
              self.name = name
              
          def __new__(cls, *args, **kwargs):
              if not cls.__instance:
                  cls.__instance = object.__new__(cls)
              return cls.__instance
      obj = A('liky')
      
    9. __item__系列

      class A:
          def __init__(self,name):
              self.name = name
      
          def __getitem__(self, item):
              print(item)
              print(self.__dict__[item])
      
          def __setitem__(self, key, value):
              print(key)
              print(value)
              self.__dict__[key] = value
      
          def __delitem__(self, key):
              print(key)
      
      obj = A('海狗')
      obj['name']  # 执行getitem
      obj['age'] = 18 # 执行setitme
      del obj['age'] # 执行delitme
      
    10. _delattr_

      class A:
          def __init__(self,name):
              self.name = name
      
          def __delattr__(self, item):
              print(item)
      
      obj = A('海狗')
      del obj.name
      
    11. __enter__ _exit_ 上下文管理

      class A:
          def __init__(self,name):
              self.name = name
      
          def __enter__(self):
              print(111)
              return self  # 必须返回self
      
          def __exit__(self, exc_type, exc_val, exc_tb):
              print(333)
      
      with A('海狗') as obj:
          print(obj.name)
      # 111
      # 海狗
      # 333
      # __enter__和__exit__两个方法是一组,一起出现
      
    12. _iter_

      class A:
          def __init__(self,name):
              self.name = name
      
          def __iter__(self):
              for i in range(10):
                  yield i
      
      obj = A('海狗')
      for i in obj:
          print(i)
      

    6.6 异常处理

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/lav3nder/p/11802080.html
Copyright © 2020-2023  润新知