由于我不熟悉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完成
答案 0 :(得分:5)
您需要从类方法中调用self
。
self.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))
由于将其包装在类中,因此使名称空间变得复杂。它不再称为addx
或addy
,因此使用这些名称将引发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'))