python - 如何在 Python 的不同类中使用变量?

标签 python class

这是我的代码:

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/

相关文章:

c#类同时实现和继承

c# - 如何使用类本身作为方法参数?

python - Django GenericRelation 仍然没有启用从 GenericForeignKey 的反向查询

python - 我什么时候应该在 Django 中使用惰性函数

python - Tensorflow 无法通过变量获取梯度,但可以通过张量获取梯度

c# - 如何使用具有层次结构的类结构的 C# 反序列化

c++ - 为什么这个类会卡住程序?

python - 如何在 python 中用数据框中的随机整数替换 0?

python - 无法在 Django 中调试或使用 pdb : bdb. BdbQuit

C# 如何从子类调用静态方法