Python - 将函数参数直接传递给cls()

时间:2016-02-12 13:15:58

标签: python

我遇到了以下代码段 -

\0

它定义的类的名称是' Thread'。这段代码创建了一个新的线程对象,但是我无法理解这个特定代码是如何尝试从try块中的代码那样做的。

cls是一个功能?

2 个答案:

答案 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然后传递给类构造函数以生成变量线程。