gpt4 book ai didi

python - 为什么我不能从另一个类访问实例的属性?

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:40 25 4
gpt4 key购买 nike

我在这个问题上遇到了一段时间的麻烦,下面是这个问题的一个例子:

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() 的调用。

关于python - 为什么我不能从另一个类访问实例的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com