是否允许将方法的输出添加到 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
。
我有一个 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
。