• 内置函数(魔法方法)


    内置函数(魔法方法)

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

    类的内置方法,会在某种条件满足的情况之自动触发。

    __init__:在调用类时自动触发,调用该类的时候,内部会通过__new__产生一个新的对象。
    __new__:在调用new时自动触发,通过产生的对象自动调用__init__
    __getattr__:在对象.属性获取属性时,若属性没有时触发。
    __getattribute__:在对象.属性时,无论属性有没有都会触发。
    __setattr__:当对象.属性=属性值,添加或修改属性时触发。
    __call__:在调用对象+()时触发。
    __str__:打印对象时触发,注意,必须要有一个字符串返回值
    __getitme__:对象通过对象[key]获取值时触发
    __settime__:通过对象[key]设置值时触发

    单例模式:

    在确定类中的属性与方法不变时,需要反复调用,

    产生不同的对象,会产生不同的内存地址,造成资源的浪费。

    让所有的类实例化时,指向同一个内存地址,称之为单例模式。--》无论产生多个对象,都会指向单个实例。

    作用:节省内存空间

    单例模式:

    1.通过classmethod

    2.通过装饰器

    3.通过——new__实现

    4.通过导入模块

    5.通过元类实现

     

    栗子

    通过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('启动')
       def close(self):
           print('关闭')

    通过__new__实现
    class Abcd:
    __instance =None
    def __init__(self,name,age):
    self.name = name
    self.age = age
    def __new__(cls, *args,**kwargs):
    if not cls.__instance:
    #调用object.__new__产生一个空对象
    cls.__instance = object.__new__(cls)

    return cls.__instance
     

     

  • 相关阅读:
    PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
    PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
    PAT甲题题解-1028. List Sorting (25)-水排序
    BZOJ 1492 货币兑换Cash
    Codeforces 276D Little Girl and Maximum XOR
    Codeforces 526E Transmitting Levels
    Codeforces 335B Palindrome
    BZOJ 2527 Meteors
    Codeforces 449D Jzzhu and Numbers
    FJ省队集训DAY4 T3
  • 原文地址:https://www.cnblogs.com/cyfdtz/p/11984735.html
Copyright © 2020-2023  润新知