gpt4 book ai didi

python - 如何访问另一个对象

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

我一直在尝试使用 __init__ 方法创建一个类,该方法将从另一个对象的属性中收集一些数据。以下代码是我的问题的简单演示。

主.py

import foo
import rat
Archive = foo.Foo()
A = rat.Rat()

大鼠.py

import foo

class Rat:

def __init__(self):
self.name = "Hi there"
self.birthday = Archive.tick

foo.py

import rat
class Foo:

def __init__(self):
self.tick = 5

如您所料,这行不通,它告诉我:

in __init__
self.birthday = Archive.tick
NameError: name 'Archive' is not defined

我不明白为什么它告诉我Archive is not defined。为什么它不能访问我刚创建的实例?为什么会发生这种情况,我该如何解决?

PS:我知道以这种公共(public)方式访问对象的属性通常是一个糟糕的主意,但是 foo 类在这里只是为了拥有一个通用的数据收集对象,没有什么严重的。

最佳答案

Archive 未定义在 rat.py 的范围内。

仅仅在要加载的模块中的某处定义 Archive 是不够的 - 您还需要通过导入它或将其分配给其他名称,使其在您使用它的任何地方都可用。

所以你有两个选择:

  1. rat.py 中的 main 导入 Archive
  2. Archive 传递给 Rat()

不过,我建议不要导入它。您似乎已经有了循环导入(foo 导入 rat ,反之亦然)。这有时可以工作,但通常这是一个坏主意,应该避免。相反,您应该以一种有意识地决定什么类需要知道什么,以及因此什么导入它所在的模块实际需要的方式来设计和构建您的代码。 (为什么 rat 导入 foo?它什么也没做)。

所以这就是我的建议:

rat.py

class Rat(object):

def __init__(self, archive):
self.archive = archive
self.name = "Hi there"
self.birthday = self.archive.tick

main.py

from rat import Rat
from foo import Foo

archive = Foo()
rat = Rat(archive)

与您的问题无关的其他更改:

关于python - 如何访问另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25901577/

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