我正在使用一个类,该类执行一些数学运算并存储结果,然后是一条为该类设置“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.
使用默认值声明类属性,然后稍后重新分配它。
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))