Python 无法从其他类中调用类的函数
我是Python类新手,试图通过Tkinter为科学代码编写接口。但是我不能从一个类或函数调用一个函数(它在另一个类中,打开了一个不同的框架)。我已经搜索了两天多,但找不到我的案例的答案。如果你像给孩子解释一样解释,我会很高兴,因为我不知道很多技术细节 我的代码结构如下: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)
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这是注释的第二部分,但“您需要…”是不正确的。继承很可能不是“更好的方法”。