这是我的代码:
class ProjectApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.filepaths = []
class StartPage(tk.Frame):
def __init__(self, parent, controller, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.controller = controller
self.parent = parent
def get_file(self):
filepath = askopenfilename()
if filepath:
print(ProjectApp.filepaths)
self.parent.filepaths.append(filepath)
我正尝试在另一个类中使用文件路径,但出现以下错误。
AttributeError: type object 'ProjectApp' has no attribute 'filepaths'
能告诉我错在哪里吗?
最佳答案
这取决于你想要什么。对象有两种属性: 类属性和实例属性。
类属性
类属性对于类的每个实例都是相同的对象。
class MyClass:
class_attribute = []
这里 MyClass.class_attribute
已经为类定义,您可以使用它。如果您创建 MyClass
的实例,每个实例都可以访问相同的 class_attribute
。
实例属性
实例属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。您只能在一个实例上使用它们。在方法__init__
中有定义。
class MyClass:
def __init__(self)
self.instance-attribute = []
在您的情况下,filepaths
被定义为实例属性。
您可以为此更改您的类(class),您的 print(ProjectApp.filepaths)
将起作用。
class ProjectApp(tk.Tk):
filepaths = []
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
如果您需要更多解释,我建议您阅读 this python文档的一部分
关于python - 如何在 Python 的不同类中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698025/