我对python和Sikuli软件非常陌生。 :( 我试图从另一个类调用一个函数。 这是一个包含函数的类。
class Reader():
def getUsername():
....
return username
def getAddress():
.....
return address
这是另一个调用上述函数的类。
class DisplayInfo():
reader = Reader()
uName = reader.getUsername()
addr = reader.getAddress()
......
......
但是当我运行DisplayInfo类时,我收到了这个错误。
uName = reader.getUsername()
TypeError: getUsername() takes no arguments (1 given)
有人可以帮我解决这个问题吗?非常感谢提前!
答案 0 :(得分:4)
定义Reader
时,需要定义函数以获取self
参数,该参数是调用它们的类的实例:
class Reader():
def getUsername(self):
....
return username
def getAddress(self):
.....
return address
你得到的错误是因为Python试图将类实例传递给函数,但由于它们被定义为不带参数,因此无法传递那个参数。
答案 1 :(得分:2)
将您的功能定义为以下。
def getUsername(self):
def getAddress(self):
代码中缺少自我。
答案 2 :(得分:2)
Python隐式地将对象传递给方法调用,但是您需要为它显式声明参数。这通常被命名为self:
def getUserName(self)
def getAdress(self)
答案 3 :(得分:1)
尝试这个。
class Reader():
def getUsername(self):
username = "name"
return username
def getAddress(self):
address = 'address'
return address
class DisplayInfo():
reader = Reader()
uName = reader.getUsername()
addr = reader.getAddress()
reader = Reader()
uName = reader.getUsername()
uAddress = reader.getAddress()
答案 4 :(得分:1)
Python总是隐式地将对象传递给函数,这就是你得到错误的原因。您可以通过将其更改为
来解决此问题getUsername(self):
...
return username
出于这个原因使用类,因此您将函数和变量封装到仅对自己可用的对象中。为了让一个完全不同的对象能够访问其他东西所固有的东西,有以下三种方式:
实例化
基本上你刚刚做了什么,你实例化了一个读者对象并称它为方法。
如果其中一个类是子类,则子类可以使用parent方法。
您使该类继承其他类的属性。一旦掌握了它,它就会变得非常强大和有趣。
答案 5 :(得分:1)
python模块中的每个函数都需要将第一个参数作为self, 这没有任何具体含义,但如果你不遵守惯例,你肯定会陷入错误状态。
class Reader():
def getUsername(self):
....
def getAddress(self):
.....
您可以参考以下文档获取更多信息Python Classes