Python 无法从其他类中调用类的函数

Python 无法从其他类中调用类的函数,python,class,tkinter,self,Python,Class,Tkinter,Self,我是Python类新手,试图通过Tkinter为科学代码编写接口。但是我不能从一个类或函数调用一个函数(它在另一个类中,打开了一个不同的框架)。我已经搜索了两天多,但找不到我的案例的答案。如果你像给孩子解释一样解释,我会很高兴,因为我不知道很多技术细节 我的代码结构如下: class first_class(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs)

我是Python类新手,试图通过Tkinter为科学代码编写接口。但是我不能从一个类或函数调用一个函数(它在另一个类中,打开了一个不同的框架)。我已经搜索了两天多,但找不到我的案例的答案。如果你像给孩子解释一样解释,我会很高兴,因为我不知道很多技术细节

我的代码结构如下:

class first_class(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
                 ....
        def WhateverFunction():
           "do sth"
class second_class(tk.Tk):

   def __init__(self, parent, controller):
       tk.Frame.__init__(self, parent)
               .....
       **I want to use "WhateverFunction" here** 
               .....
所以基本上,我不能从另一个类访问该函数


我在网上找到的搜索结果与方法类似。但这并没有解决我的问题。这可能是因为我使用的是不同的Tkinter框架。我现在不知道。。。已经谢谢了,干杯

只需创建该类的一个实例,如果第二个类实例应由第一个类实例组成,则调用该方法

def second_class(tk.Tk):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        first_object = first_class().WhateverFunction()
现在更好的方法是从第一个类继承第二个类,如果继承有意义的话,调用该方法时考虑到两个类都有相同的父类

def second_class(first_class):

    def __init__(self, parent, controller):
        super(second_class, self).__init__(parent, controller)

        self.WhateverFunction()

注意:-请尝试遵循Python的某些约定,例如使用驼峰大小写命名类,使用蛇壳命名方法/函数。

只需创建该类的实例,如果第二个类实例应由第一个类实例组成,则调用该方法

def second_class(tk.Tk):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        first_object = first_class().WhateverFunction()
现在更好的方法是从第一个类继承第二个类,如果继承有意义的话,调用该方法时考虑到两个类都有相同的父类

def second_class(first_class):

    def __init__(self, parent, controller):
        super(second_class, self).__init__(parent, controller)

        self.WhateverFunction()

注意:-请尝试遵循Python的某些约定,例如使用驼峰大小写命名类,使用蛇壳命名方法/函数。

在代码中,您将函数
WhateverFunction
定义为
\uuu init\uuuu
中的本地函数。因此,它不能从代码的其他部分看到,也不可能被调用

例如,您可以将函数实现为方法。它看起来是这样的:

class first_class(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
             ....
    def WhateverFunction(self):
       "do sth"
现在,该函数可以作为
第一类
实例的方法在任何地方调用:

first_class_instance = first_class()
first_class_instance.WhateverFunction()

在代码中,您将函数
WhateverFunction
定义为
\uuu init\uuu
中的本地函数。因此,它不能从代码的其他部分看到,也不可能被调用

例如,您可以将函数实现为方法。它看起来是这样的:

class first_class(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
             ....
    def WhateverFunction(self):
       "do sth"
现在,该函数可以作为
第一类
实例的方法在任何地方调用:

first_class_instance = first_class()
first_class_instance.WhateverFunction()

不久前,我在这里问了同样的问题,但没有回答。基本上,你做不到
WhateverFunction
仅存在于
\uuuuu init\uuuuuu
的范围内,其本身只能
第二类调用。这是通过您链接到的“使用其他类中的方法”问题中描述的方法完成的,但这对于执行您想要执行的操作是无用的,因为您可能只从
\uuuuuu init\uuuu
获得输出,因此您无法访问该函数中定义的任何函数


为了解决这个问题,为什么不全局定义
WhateverFunction
,然后像往常一样调用它,或者在
\uuuu init\uuuu
函数之外声明它,但仍然在
第一类中呢

不久前,我在这里问了同样的问题,但没有回答。基本上,你做不到
WhateverFunction
仅存在于
\uuuuu init\uuuuuu
的范围内,其本身只能
第二类调用。这是通过您链接到的“使用其他类中的方法”问题中描述的方法完成的,但这对于执行您想要执行的操作是无用的,因为您可能只从
\uuuuuu init\uuuu
获得输出,因此您无法访问该函数中定义的任何函数


为了解决这个问题,为什么不全局定义
WhateverFunction
,然后像往常一样调用它,或者在
\uuuu init\uuuu
函数之外声明它,但仍然在
第一类中呢

如果要使用该函数,需要从创建的第一个类继承
class second\u class(first\u class):
或从
first\u class()中调用class方法。
WhateverFunction()
是否需要成为
first\u class
的方法?注意:按照代码片段缩进的方式,
WhateverFunction
实际上是在
first\u类中定义的,因此只能在
first\u类中访问。。。我把这归因于复制/粘贴或缩进错误。但是,是的,这会改变任何可能的答案,比如你不能有两个
tk.tk
(或者两个继承自
tk.tk
)的实例。为什么必须有两个类,每个类都继承自
tk.tk
?@BryanOakley这是注释的第二部分,但是“you needto…”是不正确的。如果要使用该函数,您需要从您创建的第一个类继承
class second\u class(first\u class):
或从
first\u class()中调用class方法。
WhateverFunction()
是否需要成为
first\u class
的方法?注意:按照代码片段缩进的方式,
WhateverFunction
实际上是在
first\u类中定义的,因此只能在
first\u类中访问。。。我把这归因于复制/粘贴或缩进错误。但是,是的,这会改变任何可能的答案,比如你不能有两个
tk.tk
(或者两个继承自
tk.tk
)的实例。为什么必须有两个类,每个类都继承自
tk.tk
?@BryanOakley这是注释的第二部分,但“您需要…”是不正确的。继承很可能不是“更好的方法”。