我是Python的新手,有一些Java经验。
class test:
a = "123ss"
def _init_(self,name):
self.name = name
def dosomething(self):
print self.name
b = "123"
self.c = "aaa"
在上面的例子中,a是一个类变量,self.name是一个实例变量。我的问题是b和c都是实例变量,或者b和c只有方法dosomething
内的范围(因此其他方法无法访问)
答案 0 :(得分:3)
b
是方法dosomething
中的局部变量,它只存在于那里。
self.c
是对象self
的属性。由于这恰好是实例,因此它是一个实例属性。
self.name
也会在self
上查找,但由于实例本身没有该属性,因此在尝试实例后会在类中查找它。
最后,如果您将分配给self.name
,那么您创建一个实例属性; self.name
之后会有新值,但仅限于该实例。 test.a
是类属性,它将保持不变。
答案 1 :(得分:2)
首先,初始功能为__init__
而非_init_
,
其次,c
是一个实例变量,但仅在运行instance.dosomething()
后才可用。
第三,b
仅在功能范围内可用。
答案 2 :(得分:1)
您可以自己轻松测试,例如:
class test:
a = "123ss"
def __init__(self,name):
self.name = name
def dosomething(self):
print(self.name)
b = "123"
self.c = "aaa"
for attr in ['name', 'a', 'b', 'c']: print hasattr(test, attr),
print
foo = test('bar')
for attr in ['name', 'a', 'b', 'c']: print hasattr(foo, attr),
print
foo.dosomething()
for attr in ['name', 'a', 'b', 'c']: print hasattr(foo, attr),
输出:
False True False False
True True False False
bar
True True False True
请注意,在您执行c
之前,dosomething()
不存在。
答案 3 :(得分:0)
在Python中,您必须显式使用self
来访问实例变量。否则,您将访问本地变量。