以下是一个示例python模块:
# foo.py
class Foo(object):
a = {}
def __init__(self):
print self.a
self.filla()
def filla(self):
for i in range(10):
self.a[str(i)] = i
然后我在python shell中执行此操作:
$ python
Python 2.7.2 (default, Jan 13 2012, 17:11:09)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from foo import Foo
>>> f = Foo()
{}
>>> f = Foo()
{'1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}
为什么第二次a
不为空?我错过了一些微不足道的东西。
答案 0 :(得分:3)
问题是a
没有绑定。它是类的属性,而不是对象。你想做这样的事情:
# foo.py
class Foo(object):
def __init__(self):
self.a = {}
print self.a
self.filla()
def filla(self):
for i in range(10):
self.a[str(i)] = i
答案 1 :(得分:3)
它是类的属性,而不是实例,是在定义类时创建的,而不是在实例化时创建的。
比较
class Foo(object):
def __init__(self):
self.a = {}
print self.a
self.filla()
def filla(self):
for i in range(10):
self.a[str(i)] = i
答案 2 :(得分:1)
在 _ init _ 方法中设置的任何变量都将是一个'局部变量'。
class Foo(object):
def __init__(self):
self.a = 'local' #this is a local varable
>>> f = Foo()
>>> f.a
'local'
>>> Foo.a
AttributeError: type object 'Foo' has no attribute 'a'
_ init _ 方法之外的任何变量都将是一个静态变量'。
class Foo(object):
a = 'static' #this is a static varable
def __init__(self):
#any code except 'set value to a'
>>> f = Foo()
>>> f.a
'static'
>>> Foo.a
'static'
如果你想定义'局部变量'和'静态变量'
class Foo(object):
a = 'static' #this is a static varable
def __init__(self):
self.a = 'local' #this is a local variable
>>> f = Foo()
>>> f.a
'local'
>>> Foo.a
'static'
要访问 _ init _ 方法中的静态值,请使用self。 _ class _ .a < / p>
class Foo(object):
a = 'static' #this is a static varable
def __init__(self):
self.a = 'local' #this is a local variable
self.__class__.a = 'new static' #access static value
>>> f = Foo()
>>> f.a
'local'
>>> Foo.a
'new static'