如果我们有类似的话:
foo.py
from bar import bar
class foo:
global black;
black = True;
bar = bar()
bar.speak()
f = foo()
bar.py
class bar:
def speak():
if black:
print "blaaack!"
else:
print "whitttte!"
我们跑的时候
python foo.py
我们得到了
NameError: global name 'black' is not defined
做这样的事情的最佳做法是什么?
我应该在方法中传递它吗?
bar类有父变量吗?
对于上下文,实际上black
全局用于调试步骤。
答案 0 :(得分:1)
在Python中,全局变量特定于模块。所以你的foo.py中的全局不能在你的bar.py中访问 - 不是你至少写过它的方式。
如果您希望foo的每个实例都有自己的black
值,那么请使用Ivelin显示的实例变量。如果您希望foo的每个实例共享black
的相同值,请使用类变量。
使用实例变量:
# foo.py
from bar import bar
class foo:
# Python "constructor"..
def __init__(self):
# Define the instance variables
self.bar = bar()
# Make bar talk
self.bar.speak()
# Create a function for making this foo's bar speak whenever we want
def bar_speak(self):
self.bar.speak()
################################################################################
# bar.py
class bar:
# Python "constructor"..
def __init__(self):
# Define the instance variables
self.black = True
def speak(self):
if self.black:
print "blaaack!"
else:
print "whitttte!"
玩代码:
>>> f = foo()
blaaack!
>>> b = foo()
blaaack!
>>> b.bar.black = False
>>> b.bar_speak()
whitttte!
>>> f.bar_speak()
blaaack!
使用类变量:
# foo.py
from bar import bar
class foo:
# Python "constructor"..
def __init__(self):
# Define the instance variables
self.bar = bar()
# Make bar talk
self.bar.speak()
# Create a function for making this foo's bar speak whenever we want
def bar_speak(self):
self.bar.speak()
################################################################################
# bar.py
class bar:
black = True
def speak():
if bar.black:
print "blaaack!"
else:
print "whitttte!"
玩代码:
>>> f = foo()
blaaack!
>>> b = foo()
blaaack!
>>> bar.black = False
>>> b.bar_speak()
whitttte!
>>> f.bar_speak()
whitttte!
答案 1 :(得分:0)
这是我要做的:
foo.py
from bar import bar class foo: bar = bar(black=True) bar.speak() f = foo()
bar.py
class bar: def __init__(black): self.black = black def speak(): if self.black: print "blaaack!" else: print "whitttte!”