直接将函数参数传递给cls()
这个问题在这里已经有了答案:
现在你已经编辑了你的问题,很清楚发生了什么事情。 你的方法有一个装饰器@classmethod。 根据文档:
类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 为了声明一个类方法,使用这个习惯用法:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
这(有点)等同于:
class MyClass:
def f(self, arg1, arg2, ...):
cls = self.__class__
...
Python中的类是可调用的(例如,它们可以用Class()
调用)。 因此这两件事是等同的:
a = MyClass()
和
cls = MyClass
b = cls()
总之, cls
不是一个函数,而是一个可调用的函数。 顺便说一句。 您可以通过添加特殊方法__call__
来使任何对象可__call__
:
class A:
def __call__(self):
print("Woah!")
a = A()
a() # prints Woah!
看起来第一个参数是一个类,第二个参数是一组键值参数(参见描述双星符号的这个问题)。
在函数内部,键值参数被传递给类的构造函数来创建变量线程。
链接地址: http://www.djcxy.com/p/9073.html