- __call__()魔术方法:
- 原理很简单,应用很广泛,直接上代码
class Coordiate(object):
def __init__(self, x= 0, y= 0):
self.x = x
self.y = y
def __call__(self, x, y):
# 实现__call__方法后,创建的 实例名() 就是调用__call__()方法。
self.x = x
self.y = y
def __str__(self):
return f"({self.x},{self.y})"
c1 = Coordiate(1, 2)
# 如果没有这一步,先创建一个类实例,后面的c1(2, 3)会报错。
print(c1)
c1(2, 3) # 只有实现了__call__()方法,这里才不会报错
print(c1)
__call__()方法的另一种用途,我在另一篇笔记中提到过(原理未知,不求甚解,总之可以这样用,让if语句看起来简化不少,尤其用在非嵌套格式的多分支语句的时候):
def f1():
print("--1--")
def f2():
print("--2--")
def f3():
x = input("请选择:")
if x in ["1", "2"]:
{"1":f1, "2":f2}.get(x).__call__()
f3()
请选择:2
--2--
请选择:1
--1--