我是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
答案 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