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

这个问题在这里已经有了答案:

  • **(双星/星号)和*(星号/星号)对参数做什么? 15个答案

  • 现在你已经编辑了你的问题,很清楚发生了什么事情。 你的方法有一个装饰器@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

    上一篇: Passing function arguments directly to cls()

    下一篇: Confused about ** parameters in python function calls