我如何在另一个函数中使用一个函数

时间:2018-07-06 19:45:19

标签: python

由于我不熟悉python,并且我想知道如何获得addy(self, addx)来调用addx,因此我目前正在使用类和函数。

class test:

    def __init__(self, x):
        self.x = x

    def addx(self):
        y = self.x + 10
        return y

    def addy(self, addx):
        z = addx() + 10
        return z

one = test(1)
print(one.addy())
  

第15行,在print(one.addy())TypeError中:addy()缺少1   必需的位置参数:'addx'进程以退出代码1完成

3 个答案:

答案 0 :(得分:5)

您需要从类方法中调用selfself.addx()

此行上的addx参数也不应该存在: def addy(self, addx):

我想这就是你要去的地方

class test:
  def __init__(self, x):
    self.x = x

  def addx(self):
    y = self.x + 10
    return y

  def addy(self):
    z = self.addx() + 10
    return z

one = test(1)
print(one.addy())

答案 1 :(得分:3)

通过将其包装在一个类中,您使事情变得过于复杂。取出它,它将(通常)按您期望的方式工作。

def add10(x):
    return x+10

def add20(x):
    return add10(add10(x))

由于将其包装在类中,因此使名称空间变得复杂。它不再称为addxaddy,因此使用这些名称将引发NameError。您必须改用限定名称。

class FooBar():
    def __init__(self):
        self.x = 10

    def addx(self):
        return self.x + 10  # Note the `self.` before the attribute...

    def addy(self):
        return self.addx() + 10  # ...and also before the method name.

方法总是在调用时将其拥有的对象作为第一个参数传递,这就是为什么我们得到def addx(self):但随后用self.addx()调用的原因

答案 2 :(得分:-1)

如果您尝试将addx签名中的addy与方法addx关联,则可以传递方法的字符串名称并使用getattr:< / p>

class Test:
  def __init__(self, x):
    self.x = x
  def addx(self):
    y = self.x + 10
    return y
  def addy(self, func):
    z = getattr(self, func)() + 10
    return z

s = Test(3)
print(s.addy('addx'))