如何从另一个类导入变量?
我有两个文件,分别是 foo.py
和 bar.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__方法)。