• 面向对象 魔法方法 单例(五)


    类的内置方法(魔法方法)

    内置方法(魔法方法)

    凡是在类内部定义的,以–开头–结尾的方法,都是类的内置方法,也称之为魔法方法。

    类的 内置方法,会在某种条件满足下自动触发

    内置方法如下

    –new–:在–init–触发前,自动触发。调用该类时,内部会通过–new–产生一个新的对象。

    –init–:在调用类时自动触发,通过产生的对象自动调用–init–()

    –getattr–:在‘对象.属性’获取属性时,若’属性没有’时触发

    –getattrrbute–:在’对象.属性’获取属性时,无论’属性有没有’,都会触发. 注意:return self.–dict–[item] 此处不能通过对象. 属性,否则产生递归调用,程序崩溃.

    注意:只要–getattr–与--getattribute同时存在类的内部,只会触发–getattribute–.

    –setattr–:当’对象.属性=属性值’,添加或修改属性时触发
    –call–:在调用对象‘对象 +()’时触发
    –str–:在打印对象时触发,该方法必须要有一个‘字符串’返回值
    –getitem–:通过对象[key]‘获取属性时触发。
    –setitem–:在对象通过’对象[key]=value值’设置属性时触发

    略…

    单例模式

    指的是在确定’类中的属性与方法’不变时,需要反复调用该类,产生不同的对象,会产生不同的内存地址,造成资源的浪费

    让所有类在实例化时,指向同一个内存地址,称之为单例模式.

    单例的优点:节省空间

    1. 通过classmethod

      import settings
      class MySQL:
          __instance=None
          
          def __init__(self,host,port):
              self.host = host
              self.port = port
          @classmethod
          def singleton(cls,host,port):
              if not cls.__instance:
                  obj = cls(host,port)
                  cls.__instance = obj
              return cls.__instance
          def start_mysql(self):
              print('启动mysql')
          def close(self):
              print('关闭mysql')
      obj1 = MySQL.singleton(settings.HOST,settings.PORT)
      print(obj1)
      obj2 = MySql.singleton(settings.HOST,settings.PORT)
      print(obj2)
      
    2. 通过装饰器实现

    3. 通过–new–实现

    4. 通过导入模块实现

    5. 通过元类实现

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    Leetcode709.To Lower Case转换成小写字母
    Leetcode709.To Lower Case转换成小写字母
    Leetcode717.1-bit and 2-bit Characters1比特与2比特字符
    Leetcode717.1-bit and 2-bit Characters1比特与2比特字符
    Leetcode703.Kth Largest Element in a Stream数据流中的第K大元素
    Leetcode703.Kth Largest Element in a Stream数据流中的第K大元素
    30套JSP网站源代码合集
    BeanUtils包的使用
    windows10+mysql8.0.11zip安装
    win10下vscode配置sftp
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863902.html
Copyright © 2020-2023  润新知