python类中的变量和函数

类中的变量分三种:类变量,成员变量和局部变量。

类变量是在类下面直接定义的变量,类变量被类和实例访问。所有实例在对类变量赋值之前一直共享内存,赋值后就各自保存各自的类变量。

成员变量在__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!!')

 

你可能感兴趣的:(python)