【问题标题】:How to call a function from another class in python?如何从python中的另一个类调用函数?
【发布时间】:2015-08-06 14:14:44
【问题描述】:

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

谁能帮我解决这个问题?提前非常感谢!

【问题讨论】:

    标签: python sikuli


    【解决方案1】:

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

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

    您遇到的错误是因为 Python 试图将类实例传递给函数,但由于它们被定义为不带参数,因此它无法传递那个参数。

    【讨论】:

    • 我必须更改 DisplayInfo 类中的任何内容吗?
    【解决方案2】:

    如下定义你的函数。

    def getUsername(self):
    
    def getAddress(self):
    

    您的代码中缺少自我。

    【讨论】:

      【解决方案3】:

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

      def getUserName(self)
      def getAdress(self)
      

      【讨论】:

        【解决方案4】:

        试试这个。

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

        【讨论】:

          【解决方案5】:

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

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

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

          实例化

          基本上你刚刚做了什么,你实例化了一个阅读器对象并调用它的方法。

          Class in a class

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

          Inheritance

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

          【讨论】:

            【解决方案6】:

            python模块中的每个函数都需要第一个参数为self, 这没有任何特定含义,但如果您不遵守约定,您肯定会进入错误状态。

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-09
              • 2019-12-17
              • 1970-01-01
              • 2020-04-16
              • 1970-01-01
              相关资源
              最近更新 更多