我在这个问题上遇到了一段时间的麻烦,下面是这个问题的一个例子:
class Player(object):
def __init__(self):
self.weapon = "rifle"
self.rifle_test = Rifle(self)
self.dictionary = {}
self.dictionary["rifle"] = self.rifle_test
def check(self):
print(self.weapon)
print(self.dictionary[self.weapon].ammo)
class Rifle(object):
def __init__(self, player):
self.ammo = 10
self.player = player
self.player.check()
player_test = Player()
我有一个玩家(“player_test”)和一支步枪(“rifle_test”)。当我在 Rifle() 中调用 check() 时,控制台中没有打印任何内容。我试过四处移动,将两个类分开并且在 player_test 中没有 rifle_test 等。主要问题是:当我从另一个实例执行特定实例的函数时,该函数被执行但未被处理就好像它是从携带它的实例中执行的一样。换句话说,如果我从 Rifle() 执行 check(),它与从 player_test 执行它会有所不同。有没有办法像我从 player_test 执行它一样执行该函数?谢谢。
请您参考如下方法:
你有一些互斥的依赖。仔细查看执行程序时发生的情况:
首先,你创建一个新的播放器
player_test = Player()
创建一个新播放器意味着调用该类的 __init__ 方法,所以我们这样做......
class Player(object):
def __init__(self:
self.weapon = "rifle"
self.rifle_test = Rifle(self)
哦!但是中途,我们创造了一支新步枪。
class Rifle(object):
def __init__(self, player):
self.ammo = 10
self.player = player
self.player.check()
好了,我们的步枪已经创建好了,我们调用 self.player.check():
def check(self):
print(self.weapon)
print(self.dictionary[self.weapon].ammo)
但是等等!我们从一开始就没有完成播放器的创建。此时,虽然定义了self.weapon,但实际上还没有创建self.dictionary。
check 的定义取决于是否有一个已初始化的self.dictionary,但是您拥有的self.dictionary 取决于有一个定义的 self.rifle_test,这又取决于 check。
这是一个循环依赖,是行不通的;你需要重新设计。我建议从 Rifle 的 __init__ 中删除对 check() 的调用。
