我有一个PlayoffCreator
类来创建季后赛比赛。这个类有一个Bracket
生成括号结构的实例,该结构中的每个匹配都是一个Node
,由该类的两个实例组成Element
.
然后PlayoffCreator
经历每一个Node
the Bracket
拥有并处理它,创建匹配并执行其他必要的操作。当处理一个Node
, both Element
s被处理:这个Element
类有多个子类,每个子类定义不同的process()
行为。
问题是一个Node
通过传递两个实例化Element
s:
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(使用前将#替换为@)