【问题标题】: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,但我并不完全理解。有没有不使用函数调用的方法?
【问题讨论】:
标签:
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()
这里有两个问题。
- self 表示类的实例。因为,Mkprop 类没有 fun1() 的定义,所以它不能访问 fun1()
- 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()。它是这样的:父类 -> 子类 -> 函数。