魔法方法
【例子】利用__new__实现单例模式。(什么叫做单例模式?)
class Earth:
pass
a = Earth()
print(id(a)) # 260728291456
b = Earth()
print(id(b)) # 260728291624
class Earth:
__instance = None # 定义一个类属性做判断
def __new__(cls):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
a = Earth()
print(id(a)) # 512320401648
b = Earth()
print(id(b)) # 512320401648
__new__方法主要是当你继承一些不可变的 class 时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。
这里加数是a,被加数是b,因此是a主动,反运算就是如果a对象的__add__()方法没有实现或者不支持相应的操作,那么 Python 就会调用b的__radd__()方法。
class Nint(int):
def __radd__(self, other):
return int.__sub__(other, self) # 注意 self 在后面
a = Nint(5)
b = Nint(3)
print(a + b) # 8
print(1 + b) # -2
int没有和Nint之间的add方法,所以调用了Nint的radd,返回sub(1,3)
本文深入探讨Python中魔法方法的应用,包括使用__new__方法实现单例模式,确保类实例的唯一性。同时,通过__radd__方法实现反向运算,解决不同数据类型间的运算问题,展示Python的灵活性与强大功能。
671

被折叠的 条评论
为什么被折叠?



