1 # 在重写new方法的时候,一定要调用父类的new方法,来完成对象创建,并且将对象返回出去 2 class Test(object): 3 # 参数cls代表类的本身 4 def __new__(cls,*args,**kwargs): 5 return object.__new__(cls)
1 # 单例模式 2 class MyTest(object): 3 __instance = None # 设置类私有属性,用来记录该类是否有创建过对象 4 5 def __new__(cls,*args,**kwargs): 6 if not cls.__instance: 7 cls.__instance = object.__new__(cls) 8 return cls.__instance 9 else: 10 return cls.__instance 11 12 t = MyTest() 13 t1.name = ‘Alan‘ 14 t1 = MyTest() # t1即可访问也可修改t的属性 # 作用:可节约内存 15 print(t1.name) # 结果 >>> Alan id值与t1id值相同
1 # 单例模式装饰器 2 def single(cls): 3 instance = {} 4 def fun(*args, **kwargs): 5 if cls in instance: 6 return instance[cls] 7 else: 8 instance[cls] = cls(*args, **kwargs) 9 return instance[cls] 10 return fun 11 12 @single 13 class Test: 14 pass
# 使用print打印触发的是__str__方法 >>> a = ‘abc‘ >>> print(a) abc # 交互环境下输入变量的时候触发的是__repr__方法 >>> a ‘abc‘
1 class MyTest(object): 2 3 def __init__(self, name): 4 self.name = name 5 6 def __str__(self): 7 return "调用了str方法" 8 9 def __repr__(self): 10 return "调用了repr方法" 11 12 m = MyTest("Alan") 13 print(m) # >>> 调用了str方法 14 str(m) # >>> 调用了str方法 15 format(m) # >>> 调用了str方法 16 17 repr(m) # >>> 调用了repr方法
1 class MyTest(object): 2 3 def __init__(self, name): 4 self.name = name 5 6 def __call__(self, *args, **kwargs): 7 print("-——call————") 8 9 m = MyTest() 10 m() # >>> 调用了call方法
1 # 类实现装饰器 2 class Decorator: 3 4 def __init__(self, func): 5 self.func = func 6 7 def __call__(self, *args, **kwargs) 8 self.func() 9 10 @Decorator # test = Decorator(test) 11 def test(): 12 print("这是功能函数") 13 14 test()
原文:https://www.cnblogs.com/xi77/p/14529900.html