如何实例化相互依赖的类?

2024-03-04

我有一个PlayoffCreator类来创建季后赛比赛。这个类有一个Bracket生成括号结构的实例,该结构中的每个匹配都是一个Node,由该类的两个实例组成Element.

然后PlayoffCreator经历每一个Node the Bracket拥有并处理它,创建匹配并执行其他必要的操作。当处理一个Node, both Elements被处理:这个Element类有多个子类,每个子类定义不同的process()行为。

问题是一个Node通过传递两个实例化Elements:

class Node:
    def __init__(self, bracket, home_element, away_element):
        pass

But an Element也是通过传递一个实例化的Node,因为process()方法作用于在以下位置找到的数据Bracket and PlayoffCreator,都可以通过Node.

class Element:
    def __init__(self, node):
        pass

通常如何处理这种对实例化问题的循环依赖?


我看到两种可能性。

1 - 实例化两个元素,然后设置依赖关系

class A:
    def __init__(self):
        self.b = None

class B:
    def __init__(self):
        self.a = None

a = A()
b = B()
a.b = b
b.a = a

您可以通过添加进一步推动这一点b可选参数A的构造函数,默认为None,并对B:

class A:
    def __init__(self, b=None):
        self.b = b

class B:
    def __init__(self, a=None):
        self.a = a

这允许您通过传递第一个实例来实例化第二个:

a = A()
b = B(a)
a.b = b

2 - 实例化B at A实例化,然后获取该实例

class A:
    def __init__(self):
        self.b = B(self)

class B:
    def __init__(self, a):
        self.a = a

a = A()
b = a.b

两种方法都有其优点和缺点。 我更喜欢 n°1,因为它更灵活,因为对称。 然而,如果两个类之间存在逻辑层次结构,则也可以使用 n°2。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实例化相互依赖的类? 的相关文章

  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • Clojure:转换 Varargs 但保留 Varargs

    我正在用 Clojure 开发一个小宠物项目 我有一个传递可变参数的函数 defn foor bar args let new args custom transform args do something new args But do
  • 从 UITapGestureRecognizer 中删除目标

    我已将操作作为匿名方法添加到我的手势识别器中 UITapGestureRecognizer tapGesture new UITapGestureRecognizer tapGesture AddTarget gt HandleTap ta
  • .Net Core 3.0 Nginx 不提供静态文件

    我有一个 net core 3 0 Web 应用程序 我想在 Debian Buster 服务上运行 我按照微软的说明进行操作发现Here https learn microsoft com en us aspnet core host a
  • 特定递归函数的增长顺序

    以下函数的增长顺序是什么 static int counter 0 static void Example int n if n 1 return for int i 0 i lt n i counter Example n 2 为了解决这
  • 如何在给定的绘图上绘制垂直线

    给定时间表示中的信号图 如何绘制标记相应时间索引的线 具体来说 给定一个时间索引范围从 0 到 2 6 秒 的信号图 我想绘制垂直红线来指示列表的相应时间索引 0 22058956 0 33088437 2 20589566 我该怎么做 添
  • 如何检查Google用户的图片是默认的还是上传的?

    如何检查用户的个人资料图片是默认的还是上传到 Google 的 Note 当您从 API 获取用户详细信息时 所有默认个人资料图片都有以下 URL https lh3 googleusercontent com XdUIqdMkCWA AA
  • 适用于 Safari 浏览器的类似 Firebug 的插件

    Safari 是否有一个开发工具插件 就像 Firefox 的 Firebug 插件一样 Firebug 很棒 但 Safari 提供了自己的内置开发工具 如果您还没有尝试过 Safari 的开发工具包 请转到 Safari gt 首选项
  • Vim 的 Clang 完整版

    我复制了clang complete vim插件 但是当我输入 在一些变量之后 它说 未找到模式 我搜索了这个问题 有人说我应该配置g clang complete auto and g clang complete copen 我怎样才能
  • Swift 从对象数组映射到异步函数数组并等待它们全部

    我刚刚更新到 Xcode 13 2 1 现在可以访问异步等待 并且我正在尝试找到可以从合并 转换 为异步等待的地方 我想实现以下目标 给定一个像 的类型 struct Person let name String func fetchAva
  • React Native 地图:在react-native-maps 中使用自定义标记时,标记图像不显示

    我在用着react native maps但我遇到了一个问题 经过大量谷歌搜索后没有答案让我在这里问它 我正在尝试使用自定义标记作为地图中的标记 如下图所示 当我搜索时我发现需要使用自定义标记来完成创客的设计 然后我创建了一个自定义标记组件
  • 如何将 Jsoup(Java html 解析器)中生成的文档转换为字符串

    我有一个用 jsoup 制作的文档 如下所示 Document doc Jsoup connect http en wikipedia org get 我该如何转换它doc成字符串 你有没有尝试过 Document doc Jsoup co
  • JavaFX RotateTransition 无限期停止

    下面代码的问题在于两个动画之间有大约半秒的暂停 我希望节点不断旋转 RotateTransition rt new RotateTransition Duration seconds 2 syncNode rt setFromAngle 0
  • 如何停止反应原生动画

    我试图在本机反应中停止动画 但它不起作用 我尝试这样做停止动画方法 https facebook github io react native docs animated html stopanimation 这是我的代码 construc
  • 如何使用 Spark 查找中位数和分位数

    我怎样才能找到一个中位数RDD使用分布式方法 IPython 和 Spark 计算整数 这RDD大约有 700 000 个元素 因此太大而无法收集和查找中位数 这个问题与这个问题类似 如何使用 Apache Spark 计算精确中位数 ht
  • 如何在新窗口中打开链接?

    我有一个特定链接的点击处理程序 在其中我想做类似以下的事情 window location url 我需要这个才能在新窗口中实际打开网址 我该怎么做 您可以喜欢 window open url window name window sett
  • Java 并行流的性能影响

    使用的最佳实践是什么 stream parallel 例如 如果您有一堆阻塞 I O 调用 并且您想要检查是否 anyMatch 并行执行此操作似乎是明智的做法 示例代码 public boolean hasAnyRecentReferen
  • 在 C# 中删除继承对象的属性

    如果我有一个复杂的对象 我可以继承它并remove or ignore某些属性 如果你不在乎why我想这样做 请随意提交答案 如果您关心的话 可以阅读这个问题 https stackoverflow com questions 860786
  • 无法让 php exec 工作

    我已经为此奋斗了几个小时 但似乎无法解决 尝试了 exec shell exec 和 system 什么都不起作用 我有这个 exec usr bin php var www vhosts domain com httpdocs shell
  • 机器模式下mret和ret指令有什么区别?

    当RISC V核心工作在机器模式时 mret和ret指令有什么区别吗 ret is a pseudoinstruction which actually is a jalr instruction while mret is a real
  • 如何实例化相互依赖的类?

    我有一个PlayoffCreator类来创建季后赛比赛 这个类有一个Bracket生成括号结构的实例 该结构中的每个匹配都是一个Node 由该类的两个实例组成Element 然后PlayoffCreator经历每一个Node the Bra