我遇到了以下代码段 -
\0
它定义的类的名称是' Thread'。这段代码创建了一个新的线程对象,但是我无法理解这个特定代码是如何尝试从try块中的代码那样做的。
cls是一个功能?
答案 0 :(得分:3)
既然您已经编辑过您的问题,那么它就会清楚地发生了什么。你的方法有一个装饰者@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__
:
class A:
def __call__(self):
print("Woah!")
a = A()
a() # prints Woah!
答案 1 :(得分:1)
看起来第一个参数是一个类,第二个参数是一组键值args(参见this question describing the double star notation)。
在函数内部,键值args然后传递给类构造函数以生成变量线程。