类的内置方法(魔法方法)
内置方法(魔法方法)
凡是在类内部定义的,以–开头–结尾的方法,都是类的内置方法,也称之为魔法方法。
类的 内置方法,会在某种条件满足下自动触发
内置方法如下
–new–:在–init–触发前,自动触发。调用该类时,内部会通过–new–产生一个新的对象。
–init–:在调用类时自动触发,通过产生的对象自动调用–init–()
–getattr–:在‘对象.属性’获取属性时,若’属性没有’时触发
–getattrrbute–:在’对象.属性’获取属性时,无论’属性有没有’,都会触发. 注意:return self.–dict–[item] 此处不能通过对象. 属性,否则产生递归调用,程序崩溃.
注意:只要–getattr–与--getattribute同时存在类的内部,只会触发–getattribute–.
–setattr–:当’对象.属性=属性值’,添加或修改属性时触发
–call–:在调用对象‘对象 +()’时触发
–str–:在打印对象时触发,该方法必须要有一个‘字符串’返回值
–getitem–:通过对象[key]‘获取属性时触发。
–setitem–:在对象通过’对象[key]=value值’设置属性时触发
略…
单例模式
指的是在确定’类中的属性与方法’不变时,需要反复调用该类,产生不同的对象,会产生不同的内存地址,造成资源的浪费
让所有类在实例化时,指向同一个内存地址,称之为单例模式.
单例的优点:节省空间
-
通过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)
-
通过装饰器实现
-
通过–new–实现
-
通过导入模块实现
-
通过元类实现