我暂时遇到这个问题,以下是问题的一个例子:
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()
Run Code Online (Sandbox Code Playgroud)
我有一个玩家("player_test")和一个步枪("rifle_test").当我在Rifle()中调用check()时,控制台中没有打印任何内容.我已经尝试过移动东西,将两个类分开并且没有在player_test中使用rifle_test等.主要问题是:当我从另一个实例执行特定实例的函数时,该函数被执行但不被视为是是从携带它的实例执行的.换句话说,如果我从Rifle()执行check(),它将与我从player_test执行它不同.有没有办法执行该功能,就像我从player_test执行它一样?谢谢.
您有一些互斥的依赖项.仔细查看执行程序时会发生什么:
首先,您创建一个新玩家
player_test = Player()
Run Code Online (Sandbox Code Playgroud)
创建一个新的播放器意味着调用__init__该类的方法,所以我们这样做......
class Player(object):
def __init__(self:
self.weapon = "rifle"
self.rifle_test = Rifle(self)
Run Code Online (Sandbox Code Playgroud)
哦! 但到了一半,我们制造了一支新步枪.
class Rifle(object):
def __init__(self, player):
self.ammo = 10
self.player = player
self.player.check()
Run Code Online (Sandbox Code Playgroud)
好吧,我们的步枪已经创建,我们称之为self.player.check():
def check(self):
print(self.weapon)
print(self.dictionary[self.weapon].ammo)
Run Code Online (Sandbox Code Playgroud)
可是等等!我们从未在第一时间完成创建播放器.此时,虽然self.weapon已定义,self.dictionary但实际上尚未创建.
check你所拥有的定义取决于是否有一个初始化self.dictionary,但你self.dictionary所拥有的取决于有一个被定义的self.rifle_test,而这又取决于check.
这是一个循环依赖,它不会起作用; 你需要重新设计.我建议check()你从你的步枪上取下电话__init__.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |