Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
174 views
in Technique[技术] by (71.8m points)

python中 类加括号为什么不调用__call__()呢

类加()会调用 类的 __new__() 和 __init__()方法。
对象加() 会调用 __call__()方法。
疑问:
pyhton中一切都是对象,类也是对象,为什么类加括号没有调用类中的__call__()方法?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

定义时类带括号是一种class类类型语法糖,它产生的是type实例,生产通俗意义上类的类


class type(object)
 |  type(object_or_name, bases, dict)
 |  type(object) -> the object's type
 |  type(name, bases, dict) -> a new type
     Methods defined here:

 __call__(self, /, *args, **kwargs)
     Call self as a function.

准确来讲,调用__call__ 方法的是实例,即当你将实例当函数使用时,触发它

class A():
    pass

上述类A定义时用了括号,产生了一个A类

o = A()     #用类模板生成一个实例o
o()         # 实例直接当函数使用,调用类定义时的__call__方法逻辑

当使用关键字class,function 定义类或函数时,本质是编译器帮你声明且赋值了一个同类名,函数名相同的类型变量


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...