【问题标题】:Calling functions from different Classes in Python在 Python 中从不同的类调用函数
【发布时间】:2021-07-22 10:37:23
【问题描述】:

我在 python 方面比较新,我有以下问题,我的代码看起来像这样:

class Hkprop:

    def hkprop_f(self):
        hkprop= self.Mkprop().fun2() + self.Fkprop().fun4()
        return hkprop

    class Fkprop:
        def fun1(self):
            #something

        def fun2(self):
            self.fun1()


    class Mkprop:
        def fun3(self):
            #something

        def fun4(self):
            self.fun1() #here I want to call fun1 but I don't know if it is possible or how to do it

我知道这可能是一个超级基本的问题,但如果有人可以帮助我,我会非常感激它。我一直在寻找并遇到@staticmethod,但我并不完全理解。有没有不使用函数调用的方法?

【问题讨论】:

  • 当您定义“Mkprop”时,名称self 并不指代Fkprop 的实例。我想你可能误解了nested classes

标签: python static-methods inner-classes


【解决方案1】:

如果你想调用fun1,你可以做Hkprop.Fkprop.fun1()

【讨论】:

    【解决方案2】:

    是的,这是基本的,但有时,即使是这样的基本问题也需要一点时间才能弄清楚。所以,我假设你的缩进是正确的,并且你有嵌套的类。这是我所做的解决方案......希望这对你有帮助...... 您将需要使用类继承方法,或者简单地学习如何将类对象从一个类实例化到另一个类,如下所示。

    当您将此代码保存到文件时运行它。您将首先看到它将实例化 Hkprop.Mkprop 和调用 fun4。接下来,我们在 func4 中实例化 Hkprop.Fkprop 以便能够在 FKprop 类中调用 func1。

        class Hkprop:
    
        def hkprop_f(self):
            hkprop= self.Mkprop().fun2() + self.Fkprop().fun4()
            return hkprop
    
        class Fkprop:
            def fun1(self):
                print('I just called this function')
    
            def fun2(self):
                    self.fun1()
    
    
        class Mkprop:
            def fun3(self):
                 print('this is soemthing')
    
            def fun4(self):
                    fk = Hkprop.Fkprop()
                    fk.fun1()
    
    
    if __name__ == '__main__':
        mk = Hkprop.Mkprop()
        mk.fun4()
    

    【讨论】:

      【解决方案3】:

      让我们分解您的代码。你写道:

      def fun4(self):
          self.fun1()
      

      这里有两个问题。

      1. self 表示类的实例。因为,Mkprop 类没有 fun1() 的定义,所以它不能访问 fun1()
      2. fun1() 函数还需要 Fkprop 类中的参数

      在 fun4 中,如果你想调用 fun1() 则进行以下更改:

      def fun4(self):
          Hkprop.Fkprop.fun1(self)
      

      此外,在python中,函数不能有空体。您当前的代码将收到错误:

      IndentationError: expected an indented block
      

      因为解释器需要一个缩进的函数体。要保留空函数,请像这样更改 fun1 和 fun3 函数

      def fun1():
          pass
      
      def fun3():
          pass
      

      pass 是 Python 中的特殊语句,它什么都不做。它只能作为一个虚拟语句。

      【讨论】:

        【解决方案4】:

        我以前从未尝试过嵌套类。在您的情况下,您似乎正在从一个类中调用一个不存在的函数。 fun1()Mkprop 类中不存在。

        如果你想调用fun1(),你必须从它各自的类中调用它,因此,Hkprop().Fkprop().fun1()。它是这样的:父类 -> 子类 -> 函数

        【讨论】:

          猜你喜欢
          • 2017-06-22
          • 1970-01-01
          • 1970-01-01
          • 2020-07-31
          • 2018-07-27
          • 2015-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多