繁体   English   中英

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

[英]Cross referencing the attributes of nested class instance from the owner class instance

我是pyhton的新人。 我尝试写一个简单的身份证阅读器和编辑器。 我使用tkinter和一个Character类创建了一个窗口类,该类读取卡片并显示卡片并允许编辑。 我简化了代码并删除了许多部分。 因为一切正常但我找不到将两个实例的彼此属性从一个引用到另一个的方法。 我想让两个班级分开。 我知道可以将窗口类属性继承到Character。 但我不想要它。

这是简化的代码。

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)

错误:NameError:名称'MainWindow'未定义字符创建

MainWindow是CreateWindow类的一个实例,它在整个会话期间只是一个实例。 但是每个文件都将在MainWindow类中创建一个Character类的新实例。

如何使用这样的交叉引用?

MainWindow是CreateWindow类的一个实例,它在整个会话期间只是一个实例。 但是每个文件都将在MainWindow类中创建一个Character类的新实例。

如果我理解正确,您只需要将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代码的方式对于python来说非常罕见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM