zoukankan      html  css  js  c++  java
  • 面向对象 魔法方法 单例(五)

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

    内置方法(魔法方法)

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

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

    内置方法如下

    –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. 通过元类实现

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    JAVA第六次作业
    20194672自动生成四则运算题第一版报告
    20194672自动生成四则运算第一版报告
    第四次博客作业--结对项目
    第9次作业--接口及接口回调
    第8次作业--继承
    软件工程第三次作业——关于软件质量保障初探
    第7次作业——访问权限、对象使用
    第6次作业--static关键字、对象
    Java输出矩形的面积和周长
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863902.html
Copyright © 2011-2022 走看看