从所有者类实例中交叉引用嵌套类实例的属性



我是Pyhton的新手。我尝试编写一个简单的身份证读取器和编辑器。我使用tkinter和一个字符类创建了一个窗口类,该类别读取卡并显示卡并允许编辑。我简化了代码并删除了许多部分。因为任何事情都有效,但我找不到一种将两个实例的属性从一个实例转到另一个实例的属性。我想让两个课程分开。我知道可以将窗口类属性继承为字符。但是我不想要它。

这是简化的代码。

import tkinter
class CreateWindow :
    def __init__(self, width):
        self.width=width
        self.myCharacter=None
        self.CharacterLoaded=False
        self.CreateChar()

    def CreateChar (self):
        self.myCharacter=Character("George")

    def CheckMyList (self):
        print (CharacterLoaded)
        for i in self.myCharacter.Mylist:
            print(i)
class Character :

    def __init__(self, name):
        self.name = name
        self.Mylist=[2,3,4,5,6]
        print ("Character created")
        MainWindow.CharacterLoaded=True
        MainWindow.CheckMyList()
MainWindow=CreateWindow(600)

错误:名称:名称" mainwindow"未定义角色创建

MainWindow是CreateWindow类的一个实例,在整个会话中,它将仅是一个实例。但是每个文件都会创建MainWindow类中的字符类的新实例。

如何使用这种交叉引用?

MainWindow是CreateWindow类的一个实例,在整个会话中,它将仅是一个实例。但是每个文件都会创建MainWindow类中的字符类的新实例。

如果我正确理解您,您只是不需要将Character实例保留在MainWindow中。

您在应用程序上和其他模块中都有一个全局MainWindow实例,您可以做类似的事情:

from main_window import MainWindow
character = Character('this module')
MainWindow.CheckMyList(character)

另一个模块:

from main_window import MainWindow
character = Character('that module')
MainWindow.CheckMyList(character)

CheckMyList将看起来像这样:

def CheckMyList (self, character):
    for i in character.Mylist:
        print(i)

或,反之亦然,它可以是Character类方法,您将把窗口实例传递到其中。

附带注意:检查python样式指南(https://www.python.org/dev/peps/pep-0008/),格式化python代码的方式非常罕见。

最新更新