Python - 无法访问类中的变量

时间:2011-05-20 09:05:27

标签: python

我有一个基本的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?我做错了什么?

的问候, 马丁

5 个答案:

答案 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:
...

您是否阅读过the doc's tutorial's entry about classes

答案 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__。将其缩进一次以使程序正常工作。