如何在Python的静态方法中将类变量作为默认值传递

Mig*_*rez 2 python static static-methods class parameter-passing

我想将类变量作为默认值传递给静态方法。但是当我导入类时,我得到一个错误NameError: name 'MyClass' is not defined

class MyClass:

    x = 100
    y = 200

    @staticmethod
    def foo(x = MyClass.x, y = MyClass.y):
        return x*y
Run Code Online (Sandbox Code Playgroud)

tim*_*geb 5

MyClass是不是定义尚未Python的时候要绑定默认参数,但xy在班的范围已经界定。

换句话说,您可以编写:

class MyClass:
    x = 100
    y = 200

    @staticmethod
    def foo(x=x, y=y):
        return x*y
Run Code Online (Sandbox Code Playgroud)

请注意,foo承认调动到MyCLass.xMyClass.y因为默认的参数绑定一次,创建功能时。

>>> MyClass.foo()
20000
>>> MyClass.x = 0
>>> MyClass.foo()
20000
Run Code Online (Sandbox Code Playgroud)

  • 也许值得注意的是,问题和这个答案也适用于非静态方法? (2认同)