【问题标题】:How to access a class attribute for method argument [duplicate]如何访问方法参数的类属性[重复]
【发布时间】:2021-06-12 23:05:03
【问题描述】:
class Matrix:

    decimals = True

    def __init__(self, decimals=decimals):

        if decimals:
            print('The matrix will have decimal values.')
        else:
            print('The matrix will have float values.')


Matrix.decimals = False
mat1 = Matrix()

输出:

The matrix will have decimal values.

我正在尝试为一个类的所有实例更改decimals 的值,同时还将它用作__init__ 方法中的参数。为什么上述方法不起作用?

【问题讨论】:

  • 它不起作用,因为默认值是在函数/方法定义时定义(和设置)的。当你设置Matrix.decimals = False时,__init__.decimals的值已经设置为True
  • 事后看来,那个副本可能不是最好的。如果有人找到更好的,请随时更换

标签: python class


【解决方案1】:

__init__ 的默认参数在方法被定义 时进行评估。此时变量的值还是True

如果你希望类变量在方法被调用时被求值,则需要在方法体内完成:

class Matrix:

    decimals = True

    def __init__(self, decimals=None):
        if decimals is None:
            decimals = self.decimals

        if decimals:
            print('The matrix will have decimal values.')
        else:
            print('The matrix will have float values.')


Matrix.decimals = False
mat1 = Matrix()

输出:

The matrix will have float values.

【讨论】:

  • 谢谢。建议的问题与我在这里提出的问题不同。它更多地涉及继承的范围,而我的问题涉及类属性的范围。
猜你喜欢
  • 2017-05-25
  • 2023-03-17
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多