如果我在python中创建变量会发生什么

时间:2015-12-10 09:57:00

标签: python

我是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内的范围(因此其他方法无法访问)

4 个答案:

答案 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来访问实例变量。否则,您将访问本地变量。