我现在有一段时间没遇到这个问题,以下是问题的一个例子:
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执行它一样?感谢。
答案 0 :(得分:6)
您有一些互斥的依赖项。仔细查看执行程序时会发生什么:
首先,您创建一个新玩家
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
。
这是一种循环依赖,它无法发挥作用;你需要重新设计。我建议您从步枪check()
中删除对__init__
的来电。