代码演示:
class Test(object):
a = 100 # a是类变量,可以由类名直接调用,也可以由类的对象来调用
def __init__(self):
self.b = 200 # b是成员变量,可以由类的对象来调用
def fcn(self):
c = 300 # c不是成员变量,只是函数fcn内部的局部变量
self.d = 400 # d也不是成员变量,虽然以self给出,但并没有构造函数中初始化
inst = Test()
print(Test.a) #100
print(inst.a) #100
print(Test.b) #报错 AttributeError: type object 'Test' has no attribute 'b'
print(inst.b) #200
print(Test.c) #报错 AttributeError: type object 'Test' has no attribute 'c'
print(inst.c) #报错 AttributeError: 'Test' object has no attribute 'c'
print(Test.d) #报错 AttributeError: type object 'Test' has no attribute 'd'
print(inst.d) #报错 AttributeError: 'Test' object has no attribute 'd'
说明:
这里,a是类变量,可以由类名直接调用,也可以有对象来调用;
b是成员变量,可以由类的对象来调用,这里可以看出来成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象;
c不是成员变量,它只是函数fcn()内部的局部变量;
d也不是成员变量,虽然以self.给出,但并没有在构造函数中初始化。
print()后面#接着的是运行结果。