我有一个基本的python问题。我正在上课foo
并使用__init__():
对某个值执行某些操作:
class foo():
def __init__(self,bar=None):
self.bar=bar
if bar is None:
isSet=False
else:
isSet=True
print isSet
当我执行代码时,我得到:NameError: name 'isSet' is not defined
。
我如何访问isSet
?我做错了什么?
的问候, 马丁
答案 0 :(得分:4)
错误的缩进,应该是这样,否则你将退出该功能。
class foo():
def __init__(self,bar=None):
self.bar=bar
if bar is None:
isSet=False
else:
isSet=True
print isSet
答案 1 :(得分:3)
这取决于你想要做什么。您可能希望isSet
成为foo
的成员:
class foo():
def __init__(self,bar=None):
self.bar=bar
self.isSet=True
if bar is None:
self.isSet=False
f = foo()
print f.isSet
答案 2 :(得分:1)
我试试
class foo():
def __init__(self,bar=None):
self.bar = bar
self.is_set = (bar is None)
然后在课堂内
...
def spam(self, eggs, ham):
if self.is_set:
print("Camelot!")
else:
...
答案 3 :(得分:1)
在您的代码中,isSet
是类属性,而不是实例属性。因此,在类体中,您需要在print
语句中引用它之前定义它。在类及其方法之外,您必须在其前面加上类名和一个点,在这种情况下为Foo.
。请注意,def __init__()
函数体中的代码在您通过调用它来创建Foo
类的实例之前不会执行。
class Foo(object):
isSet = None
def __init__(self, bar=None):
self.bar = bar
if bar is None:
Foo.isSet = False
else:
Foo.isSet = True
print isSet
f = Foo()
print Foo.isSet
输出:
None
False
答案 4 :(得分:0)
最后一行的缩进使其在类的上下文中执行,而不是__init__
。将其缩进一次以使程序正常工作。