是否允许将方法的输出添加到 self 中?

Is it allowed to add output of a method into self?

我有一个 class 有几种方法。一种方法的输出用于其他方法。我不想将这些变量作为输入参数传递给其他方法(使代码更简单)。 我可以将此方法的输出添加到 self 中,这样我就可以在其他方法中访问这些变量。

但是,我想确定它是一个标准实现。我担心它可能会导致不可预测的错误。如果您有这方面的经验,请告诉我以下示例是否正确实施。

class MyClass:
    
    def method_1(self, A):
        return A + 1
        
    def method_2(self):
        return self.B + 10

    def method_3(self, C):
        self.B = self.method_1(C) 
        result = self.method_2()
        return result

z = MyClass()
z.method_3(1)

在上面的例子中,我不需要将self.B传递给method_2。此代码有效,但我想确保它是标准方法。

我实际做的程序比较复杂,所以我针对这个问题做了一个简单的例子。

是的,它或多或少是正确的,但执行此类操作的标准方法是使用 __init__() 方法并使用函数注释。

class MyClass:
    def __init__(self) -> None:
        self.B = 0

    def method_1(self, A: int) -> int:
        return A + 1
        
    def method_2(self) -> int:
        return self.B + 10

    def method_3(self, C: int) -> int:
        self.B = self.method_1(C) 
        result = self.method_2()
        return result

z = MyClass()
z.method_3(1)

method_2() 依赖于可能未设置的属性的地方,将其设为私有,这样人们就不会想使用它。例如,如果我这样做会怎样?

>>> z = MyClass()
>>> z.method_2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tmp.py", line 9, in method_2
    return self.B + 10
AttributeError: 'MyClass' object has no attribute 'B'

就此而言,最好也将属性设为私有。所以:

class MyClass:
    
    def method_1(self, A):
        return A + 1
        
    def _method_2(self):
        return self._B + 10

    def method_3(self, C):
        self._B = self.method_1(C) 
        result = self._method_2()
        return result

顺便说一下,在 method_1() 不使用 self 的地方,考虑将其设为 staticmethod