python的福瓦德宣言
-
12-10-2019 - |
题
以下程序可以成功运行:
class Simple(object):
def __init__(self, name):
self.name = name
def __add__(self, other):
c = Composite()
c._members.append(self)
c._members.append(other)
return c
def __repr__(self):
return "Simple('%s')" % self.name
class Composite(object):
def __init__(self):
self._members = []
def __add__(self, obj):
if isinstance(obj, Simple):
out = Composite()
out._members = [k for k in self._members] + [obj]
elif isinstance(obj, Composite):
out = Composite()
out._members = [k for k in self._members + obj._members]
else:
raise TypeError
return out
if __name__ == "__main__":
s1 = Simple('one')
s2 = Simple('two')
s3 = Simple('three')
c1 = s1 + s2
c2 = c1 + s3
print c1._members
print c2._members
# output:
# [Simple('one'), Simple('two')]
# [Simple('one'), Simple('two'), Simple('three')]
我想保留 Simple
, Composite
, , 和 __main__
在三个不同的文件中,但我不能这样做,因为我无法导入 Simple
进入 composite.py
我不能进口 Composite
进入 simple.py
.
您将如何修改类定义以使您可以保留单独的文件?
谢谢你。
PS。我已经阅读了与“远期声明”有关的几个答案,但找不到解决我的特定问题的答案。
解决方案
由于不需要参考,直到调用该方法,循环导入 能够 在这里工作。诀窍是使用完全合格的参考。
import composite
class Simple(object):
...
def __add__(self, other):
c = composite.Composite()
c._members.append(self)
c._members.append(other)
return c
其他提示
问题是您获得了循环进口,对吗?
导入简单 __add__
方法而不是在文件的顶部避免循环依赖。它会减慢 __add__
方法有点,但通常没有显着。
不隶属于 StackOverflow