如何从另一个类导入变量?

1 投票
2 回答
3284 浏览
提问于 2025-04-18 04:18

我有两个文件,分别是 foo.pybar.py

foo.py 里,我有:

class Foo:
    def __init__(self):
        self.myvar = 1

而在 bar.py 里,我有:

class Bar:
    def __init__(self):
        ...

我该怎么把 Foo 里的 self.myvar 传到 Bar 类里呢?

2 个回答

3

foo.py

class Foo(object): # new-style classes (which extend from object) are preferred
    def __init__(self):
        self.myvar = 1

bar.py

class Bar(object):
    def __init__(self, foo):
        self.myvar = foo.myvar

main.py

from foo import Foo
from bar import Bar

fooobj = Foo()
barobj = Bar(fooobj)
2

Foo和Bar是两个不同的类,分别在不同的模块里。你不能直接“导入”某个值。而且,myvar这个变量在Foo的定义中并没有在方法外设置,这意味着它只在Foo的某个实例中存在(也就是说,Foo.myvar是不存在的,但Foo().myvar是可以用的)。

实现你想要的一个方法是让Bar成为Foo的子类,并在Bar的__init__函数中调用Foo的构造函数。注意:你还需要把Foo的定义改成class Foo(object),或者调整super调用。

比如,bar.py文件可以这样写:

from foo import Foo
class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()

不过,这种做法可能不太合适,具体要看你的对象是用来做什么的。如果不合适的话,你就需要在创建Bar的时候,先创建一个Foo的实例,让Bar可以引用这个实例(也就是说,可以在bar.py里创建一个,或者把它传递给__init__方法)。

撰写回答