NameError:未定义name's'

时间:2017-09-19 11:44:08

标签: python python-3.x

我是Python新手。我正在尝试创建一个只允许创建对象的类。我正在使用私有变量实例来跟踪计数。 我的代码 -

class s:
    __instance=2

    if s.__instance<2:
        def __init__(self,x):
            s._instance = x
            s._instance = s._instance+1
            print(s._instance)

a=s(5)

当我运行我得到的代码时 -

"C:\Users\PIYU\AppData\Local\Programs\Python\Python36\python.exe" 
"C:/Users/PIYU/PycharmProjects/PythonProgram/singleton.py"
  Traceback (most recent call last):
    File "C:/Users/PIYU/PycharmProjects/PythonProgram/singleton.py", line 1, in <module>
    class s:
    File "C:/Users/PIYU/PycharmProjects/PythonProgram/singleton.py", line 4, in s
    if s.__instance<2:
    NameError: name 's' is not defined

2 个答案:

答案 0 :(得分:5)

错误是因为您在实际定义之前尝试在其自己的定义中引用s。我会尝试在__init__而不是之前使用该条件。

答案 1 :(得分:1)

在Python中,class是一个可执行语句,它创建一个新的class类对象并将其绑定到封闭范围内的类名。在整个语句执行之前(IOW直到class语句块结束),类对象不存在且名称未定义。

为了让事情变得更清楚,这个:

class Foo(object):
    bar = 42
    def foo(self):
        print "foo"

实际上只是

的语法糖
def foo(self):
    print "foo"

Foo = type("Foo", (object,), {"foo": foo, "bar": 42})
del foo  # remove the name from current scope