你能创建一个调用类实例的类变量吗?

问题描述 投票:0回答:1

我正在使用一个类,该类执行一些数学运算并存储结果,然后是一条为该类设置“noresult”但以零开头的行,就像这样(我省略了数学,这应该是所有相关位):

class Result(object):
  def __init__(self, slope, offset):
    self._slope = slope
    self._offset = offset
  
  @classmethod
  def dothemath(cls, etc):
    ...


Result.NORESULT = Result((0, 0), (0, 0))

然后有很多地方将对象的“result”属性设置为此类的实例,然后会说“if object.result is not Result.NORESULT”之类的内容

这工作正常,但 PyCharm 通过导入类在使用它的所有地方突出显示它,抱怨该类没有属性 NORESULT。有没有什么方法可以将精确相同的功能放入类本身的定义中(即,在不需要初始化类的情况下调用该类?)

我有两个想法,但都行不通:

class Result(object):
  NORESULT = cls((0,0), (0,0))
  
  def __init__:
    ...


class Result(object):
  def __init__(self, slope, offset):
    self.NORESULT = cls((0, 0), (0, 0))
    ...

两者都给我“未解析的引用 cls”,所以我猜这不起作用 - 无论如何,第二个需要我初始化类以获得 NORESULT。我之前确实在这段代码中见过 cls() ,所以我不确定为什么它在某些地方起作用,而在其他地方不起作用。这种递归真的可以放在类中吗?

我知道 Python 2.7 不再受支持,尽管它不是这个特定问题所涉及的代码片段的一部分,我正在与 Gwyddion 合作,它没有计划将其 Python 集成包 gwy 从 2.7 更新到 3。 x.

python python-2.7
1个回答
0
投票

使用默认值声明类属性,然后稍后重新分配它。

class Result(object):
  NORESULT = None

  def __init__(self, slope, offset):
    self._slope = slope
    self._offset = offset
  
  @classmethod
  def dothemath(cls, etc):
    ...


Result.NORESULT = Result((0, 0), (0, 0))
© www.soinside.com 2019 - 2024. All rights reserved.