【问题标题】:Communicating between objects in PythonPython中对象之间的通信
【发布时间】:2013-04-06 14:24:43
【问题描述】:

我有这样的事情:

class exampleClass(object):

    def doSomething(self,number):
        return number + 1

class exampleClass2(exampleClass):
    def callDefDoSomething(self):
        print exampleClass.doSomething(5)

exampleClass2.callDefDoSomething()

-

TypeError: unbound method callDefDoSomething() must be called
with exampleClass2 instance as first argument (got nothing instead)

我开始学习 Python 中的对象,但我找不到解决方案:(

【问题讨论】:

    标签: python class object function


    【解决方案1】:

    您需要创建该类的一个实例,即一个活动对象,以使事情正常工作:

    class exampleClass(object):
    
        def doSomething(self,number):
            return number + 1 
    
    class exampleClass2(exampleClass):
    
        def __init__(self):
            self.member1 = exampleClass()
    
        def callDefDoSomething(self):
            print self.member1.doSomething(5)
    
    
    object2 = exampleClass2()
    object2.callDefDoSomething()
    

    【讨论】:

      【解决方案2】:

      doSomethingexampleClass 的一个方法。因此,必须为此类的实例调用它。

      callDefDoSomething,你使用

      exampleClass.doSomething(5)
      
      然而,

      exampleClass 不是这个类的一个实例,而是这个类本身。你想在这里使用的是

      self.doSomething(5)
      

      self 指的是 exampleClass2, for whichcallDefDoSomethingsis invoked, which, due to inheritance, is an instance ofexampleClass` 的实例。

      【讨论】:

        【解决方案3】:

        只能为实例调用常规类方法,不能为类调用。所以如果你想调用 callDefDoSomething 你必须先实例化 exampleClass2。您还必须在对 callDefDoSomething 的调用中实例化 exampleClass。

        class exampleClass(object):
        
            def doSomething(self,number):
                return number + 1
        
        class exampleClass2(exampleClass):
            def callDefDoSomething(self):
                exampleClassInstance = exampleClass()
                print exampleClassInstance.doSomething(5)
        
        exampleClass2Instance = exampleClass2()
        
        exampleClass2Instance.callDefDoSomething()
        

        如果你想在类上调用方法,你应该试试 classmethods。查看python教程中classes的文档。

        【讨论】:

          【解决方案4】:

          你可以用这个:

          class exampleClass(object):
              def doSomething(self,number):
                  return number + 1
          
          class exampleClass2(exampleClass):
              def callDefDoSomething(self):
                  print super(exampleClass2,self).doSomething(5)
          
          example = exampleClass2()
          example.callDefDoSomething()
          

          【讨论】:

            猜你喜欢
            • 2019-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多