如何在 python 中调用另一个 class 的函数?

How to call a function from another class in python?

我对 python 和 Sikuli 软件还很陌生。 :( 我试图从另一个 class 调用一个函数。 这是一个包含函数的 class。

class Reader():
    def getUsername():
        ....
        return username

    def getAddress():
        .....
        return address

这是另一个调用上述函数的 class。

class DisplayInfo():
    reader = Reader()
    uName = reader.getUsername()
    addr = reader.getAddress()
    ......
    ......

但是当我 运行 DisplayInfo class 时,我得到了这个错误。

uName = reader.getUsername()
TypeError: getUsername() takes no arguments (1 given)

谁能帮我解决这个问题?提前致谢!

定义 Reader 时,函数需要定义为采用 self 参数,这是调用它们的 class 的实例:

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

    def getAddress(self):
        .....
        return address

你得到的错误是因为 Python 试图将 class 实例传递给函数,但由于它们被定义为不接受任何参数,因此它无法传递那个参数。

如下定义你的函数。

def getUsername(self):

def getAddress(self):

您的代码中缺少 self。

Python 将对象隐式传递给方法调用,但您需要为其显式声明参数。这通常被命名为 self:

def getUserName(self)
def getAdress(self)

试试这个。

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()

Python 总是隐式地将 object 传递给函数,这就是你得到错误的原因。您可以通过将其更改为

来解决此问题
getUsername(self):
...
return username

类就是因为这个原因,所以你把函数和变量封装成object只对自己可用。为了让完全不同的 object 能够访问其他东西固有的东西,有以下三种方法:

实例化

基本上就是您刚才所做的,您实例化了一个 reader object 并调用了它的方法。

Class in a class

如果 class 之一是 child class,child 可以使用 parents 方法。

Inheritance

你让 class 继承了另一个 class 的属性。一旦你掌握了它,它会非常强大和有趣。

python 模块中的每个函数都需要将第一个参数作为 self, 这个没有什么具体的意思,但是如果不按照惯例肯定会进入错误状态。

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

    def getAddress(self):
        .....

您可以参考以下文档了解更多信息Python Classes