类变量是在类下面直接定义的变量,类变量被类和实例访问。所有实例在对类变量赋值之前一直共享内存,赋值后就各自保存各自的类变量。
成员变量在__init__函数中定义的以self.开头,可以被实例访问。
局部变量是在别的函数下定义的可以self.开头也可以不以此开头。不能被访问
普通函数,不能访问类中的任何变量。
实例方法:第一个参数是self。可以通过self.访问任何类参数。
静态方法: @staticmethod,不能访问类中的变量。
类方法:@classmethod在上一行,第一个参数传入的实例。通过第一个参数访问类变量和实例变量
类方法和静态方法可以被类直接使用。
class class_name(object):
class_var = 'I am a class variable' #(1):类变量
def __init__(self):
self.instance_var = 'I am a instance varibale' #(2):成员变量(实例变量)
def instance_method(self, formal_parameter):#<2>:实例方法,可以访问类变量和成员变量
local_var_in_function = self.class_var #(3):实例方法局部变量
self.local_var_also_in_function = self.instance_var #(3)实例方法局部变量
def ordinary_function(formal_parameter):#<1>普通函数
print ("I am an ordinary function, I can't vist class var and intance var")
print (self.instance_var) #报错,因此普通函数无法访问成员函数
print (clacc_var)#报错,因此普通函数无法访问类变量
@classmethod
def class_method(tls, formal_parameter): #<3>:类方法,第一个参数时传入类,可访问和修改类变量和成员变量,类变量以cls.开头
print ('I am class method, I can visit and modifying class var and instance var')
tls.instance_var = formal_parameter
print ('instance_var changed',tls.instance_var)
class_var = formal_parameter
print ('class_var changed',class_var)
@staticmethod#<4>:静态方法,不能访问成员变量和类变量
def static_method(formal_parameter):
print(formal_parameter)
print ('I am static method, I am the Adopted son(干儿子) for this class!!')
print ("I can't visit and modify anything in the class ")
#print class_var
#print self.instance_var
class_instance = class_name()#类的一个实例 #I am a class variable
print(class_name.class_var)#类访问类变量
class_name.class_var='changed by class'#通过类改变类变量
print(class_instance.class_var)#changed by class
class_name.class_var='changed by class secondly'#通过类第二次改变类变量
print(class_instance.class_var)#changed by class secondly
class_instance.class_var='changed by class instance'#通过实例类变量,分配内存给实例的类边,从此分开处理
class_name.class_var='changed by class thirdly'#通过类第三次改变类变量
print(class_instance.class_var)#changed by class instance
#print(class_name.instance_var)报错
print(class_instance.instance_var)#I am a instance varibale
#print(class_instance.local_var_in_function)报错
class_name.class_method('class visit class method')
class_name.static_method('class visit static_method')
print ('END!!')