【问题标题】:How to use a value from first method in second method (in the same class)?如何在第二种方法中(在同一个类中)使用第一种方法中的值?
【发布时间】:2022-01-21 05:16:39
【问题描述】:

我想将can_add 方法中的d 值用于add 方法,但得到错误'MoneyBox' object has no attribute 'd'。如何将d 值用于add 方法?

class MoneyBox:
    def __init__(self, capacity = 0):
        self.capacity = capacity

    def can_add(self, v):
        self.v = v
        if self.capacity > self.v:
            self.d = True
            return d
        else:
            self.d = False
            return self.d
        
    def add(self, v):
        self.can_add(v)
        if self.d == True:
            self.v += v
        f = self.capacity - self.v
        return f

a = MoneyBox(10)
a.add(5)

【问题讨论】:

  • 您将局部变量(dv)与“类变量”(self.dself.v)混合在一起。
  • d 未在任何地方定义。

标签: python python-3.x oop


【解决方案1】:

当你想返回一个局部变量时,你试图返回一个类变量。

class MoneyBox:
    def __init__(self, capacity = 0):
        self.capacity = capacity

    def can_add(self, v):
        self.v = v
        if self.capacity > self.v:
            d = True
            return d
        else:
            d = False
            return d
        
    def add(self, v):
        d = self.can_add(v)
        if d == True:
            self.v += v
        f = self.capacity - self.v
        return f

a = MoneyBox(10)
a.add(5)

如果您希望将值保存在类变量中,您可以这样做

class MoneyBox:
    def __init__(self, capacity = 0):
        self.capacity = capacity
        self.d = False

    def can_add(self, v):
        self.v = v
        if self.capacity > self.v:
            self.d = True
            
        else:
            self.d = False
            
        
    def add(self, v):
        self.can_add(v)
        if self.d == True:
            self.v += v
        f = self.capacity - self.v
        return f

a = MoneyBox(10)
a.add(5)

【讨论】:

    【解决方案2】:

    d 不是该类的变量,但仅在 can_add 方法中,因此您无法在 add 方法中访问它。
    更何况,你也不需要它,只需要返回 true/false。

    class MoneyBox:
        def __init__(self, capacity = 0):
            self.capacity = capacity
    
        def can_add(self, v):
            if self.capacity > v:
                return True
            else:
                return False
            
        def add(self, v):
            if self.can_add(v) == True:
                v += v
            f = self.capacity - v
            return f
    
    a = MoneyBox(10)
    a.add(5)
    

    【讨论】:

      【解决方案3】:

      您不需要can_add 方法返回任何内容,因为当您在add 中调用它时,self.d 属性已经更新。因此,只需将 can_add 更改为以下内容,一切都会按预期进行:

      def can_add(self, v):
          self.v = v
          if self.capacity > self.v:
              self.d = True
          else:
              self.d = False
      

      话虽如此,我强烈建议在__init__ 中初始化所有类实例变量,以便您的定义都在一个地方并且更具可读性。比如:

      def __init__(self, capacity = 0):
              self.capacity = capacity
              self.v = None
              self.d = None
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 2019-02-28
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        相关资源
        最近更新 更多