代码之家  ›  专栏  ›  技术社区  ›  Mohammad

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

  •  0
  • Mohammad  · 技术社区  · 4 年前

    我可以将这个方法的输出添加到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 . 这个代码可以工作,但我想确定它是一个标准的方式。

    我工作的真正的程序是复杂的,所以我为这个问题做了一个简单的例子。

    1 回复  |  直到 4 年前
        1
  •  2
  •   Atharva Gundawar    4 年前

    是的,这或多或少是正确的,但这样做的标准方式是有一个 __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)
    
        2
  •  1
  •   wjandrea sebs    4 年前

    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 .

    推荐文章