【问题标题】:Cross referencing the attributes of nested class instance from the owner class instance从所有者类实例交叉引用嵌套类实例的属性
【发布时间】:2017-03-09 17:49:15
【问题描述】:

我是 pyhton 的新手。 我尝试写一个简单的身份证阅读器和编辑器。 我使用 tkinter 创建了一个窗口类和一个读取卡片并显示卡片并允许编辑的字符类。 我简化了代码并删除了许多部分。因为任何东西都有效,但我找不到将两个实例的彼此属性从一个引用到另一个的方法。 我想把两个班级分开。我知道可以将窗口类属性继承给 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 的东西。
  • 我删除了窗口配置部分,因为它可以工作 Daniel。否则代码会很长。只有这个交叉引用不起作用..这是问题..我不能从字符实例调用 MainWindow 的方法,所以窗口类会知道 Character 的属性并显示它..然后调用Character 实例并使其被保存。
  • Sorry MainWindow=CreateWindow(600) 正在创建实例...
  • 但是那个代码在哪里?
  • 哦,抱歉,Daniel 我修好了。这是我的第一个问题,所以我只是学习如何标记代码。

标签: python class oop attributes


【解决方案1】:

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 来说非常不常见。

【讨论】:

  • 谢谢鲍里斯,我会检查的。
猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 2018-08-04
  • 2021-11-07
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多