如何从python中的另一个类调用函数?

时间:2015-05-25 06:42:15

标签: python sikuli

我对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)

有人可以帮我解决这个问题吗?非常感谢提前!

6 个答案:

答案 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

出于这个原因使用类,因此您将函数和变量封装到仅对自己可用的对象中。为了让一个完全不同的对象能够访问其他东西所固有的东西,有以下三种方式:

实例化

基本上你刚刚做了什么,你实例化了一个读者对象并称它为方法。

Class in a class

如果其中一个类是子类,则子类可以使用parent方法。

Inheritance

您使该类继承其他类的属性。一旦掌握了它,它就会变得非常强大和有趣。

答案 5 :(得分:1)

python模块中的每个函数都需要将第一个参数作为self, 这没有任何具体含义,但如果你不遵守惯例,你肯定会陷入错误状态。

class Reader():
    def getUsername(self):
        ....

    def getAddress(self):
        .....

您可以参考以下文档获取更多信息Python Classes