python中类变量和成员变量、局部变量总结
转载自:https://www.cnblogs.com/clarenceyang/p/9685543.html
作者: 勿忘-前行
class Member():
num=0 #类变量,可以直接用类调用,或用实例对象调用
def __init__(self,x,y):
self.x=x #实例变量(成员变量),需要它是在类的构造函数内以self.开头来定义的
self.y=y
self.fuc(self.x,self.y)
def add(self):
total=2 #局部变量
self.vara=3 # 虽是以self.给出,但并没有在构造函数中进行初始化
self.varb=4
fina=(self.x+self.y)*total
return fina
def fuc(self,a,b):
self.varc=a #成员变量,他们在成员函数fuc()中定义,但是在构造函数中调用了fuc()函数
self.vard=b#https://www.jb51.net/article/49402.html 同时可以一道区分学习python中的实例方法、静态方法、类方法、类变量和实例变量
Python 类变量,成员变量,静态变量,局部变量
转载自:https://www.cnblogs.com/ymjyqsx/p/7380279.html
作者:去做点事情
局部
class TestClass(object):
val1 = 100
def __init__(self):
self.val2 = 200
def fcn(self,val = 400):
val3 = 300
self.val4 = val
self.val5 = 500
if __name__ == '__main__':
inst = TestClass()
print TestClass.val1
print inst.val1 print TestClass.val2 #会报错。类不能访问成员变量
print inst.val2
print inst.val3 #会报错
print inst.val4 #会报错
print inst.val5 #会报错
val1是类变量,可以由类名直接调用,也可以由对象来调用;
val2是成员变量,可以由类的对象来调用,这里可以看出成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象;如果__init__内的变量没有加self,那就变成一个__init__的局部变量;
val3不是成员变量,它只是函数fcn内部的局部变量;
val4和val5是成员变量,但并没有初始化,所以这里会报错
这个是能正确运行的
class TestClass(object):
val1 = 100
def __init__(self):
self.val2 = 200
def fcn(self,val = 400):
val3 = 300
self.val4 = val
self.val5 = 500
def add(self):
self.fcn()
result = self.val4 + self.val5
return result
if __name__ == '__main__':
inst = TestClass()
print inst.add()
这个是不能正确运行的,因为fcn是对val4,val5初始化,这里没运行fcn就没初始化
class TestClass(object):
val1 = 100
def __init__(self):
self.val2 = 200
def fcn(self,val = 400):
val3 = 300
self.val4 = val
self.val5 = 500
def add(self):
# self.fcn()
result = self.val4 + self.val5
return result
if __name__ == '__main__':
inst = TestClass()
print inst.add()
概括的一个例子
class TestClass(object):
val1 = 100
def __init__(self):
self.val2 = 200
def fcn(self,val = 400):
val3 = 300
self.val4 = val
self.val5 = 500
def add(self):
self.val4 = 1
self.val5 = 2
result = self.val4 + self.val5
return result
if __name__ == '__main__':
inst = TestClass()
print inst.add()
print inst.val4
inst.fcn()
print inst.val4
运行出来的结果:
可以看到,只要你对val4,val5初始化了就可以用实例访问,证明这个带self的是成员变量,不是局部变量。运行fcn后,对成员变量的值进行了改变。