如何在 Python 中使用类变量作为默认参数值

Posted

技术标签:

【中文标题】如何在 Python 中使用类变量作为默认参数值【英文标题】:How to use a class variable as a default argument value in Python 【发布时间】:2019-04-30 20:08:12 【问题描述】:

我想在静态方法中使用类变量作为默认参数值。 但是当我引用这个类时,我得到一个错误NameError: name 'MyClass' is not defined

class MyClass:

    x = 100
    y = 200

    @staticmethod
    def foo(x = MyClass.x, y = MyClass.y):
        return x*y

【问题讨论】:

【参考方案1】:

当 Python 想要绑定默认参数时,MyClass 尚未定义,但 xy 已在类的范围内定义。

换句话说,你可以这样写:

class MyClass:
    x = 100
    y = 200

    @staticmethod
    def foo(x=x, y=y):
        return x*y

请注意,foo不会识别对 MyCLass.xMyClass.y 的重新分配,因为默认参数在创建函数时绑定一次。

>>> MyClass.foo()
20000
>>> MyClass.x = 0
>>> MyClass.foo()
20000

【讨论】:

也许值得注意的是这个问题和这个答案也适用于非静态方法?

以上是关于如何在 Python 中使用类变量作为默认参数值的主要内容,如果未能解决你的问题,请参考以下文章

使用类自变量作为默认类方法参数[重复]

如何在Python中定义静态变量

将类变量作为默认值分配给类方法参数

python3.5中,无法numpy怎么解决?

python3.5中,无法numpy怎么解决

python 函数中怎么实现static 变量