Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数

原文地址:https://www.cnblogs.com/20150705-yilushangyouni-Jacksu/p/6238187.html

Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数

复制代码

#coding:utf-8

class class_name(object):
    class_var = 'I am a class variable' #类变量
    def __init__(self):
        self.instance_var = 'I am a instance varibale'  #成员变量(实例变量)

    def instance_method(self,  formal_parameter):
        local_var_in_function = formal_parameter    #实例方法局部变量
        self.local_var_also_in_function = formal_parameter  #实例方法局部变量

    def ordinary_function(formal_parameter):
        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(cls, formal_parameter): #类方法
        print 'I am class method, I can visit class var and instance var'

        print 'I am class method, I am modifying the instance var'
        cls.instance_var = formal_parameter
        print cls.instance_var

        print 'I am class method, I am modifying the class var'
        class_var = formal_parameter
        print class_var

    @staticmethod
    def static_method(formal_parameter):
        print 'I am static method, I am the Adopted son(干儿子) for this class!!'

        print "I can't modify anything in the class "
        #print class_var
        #print self.instance_var


print 'Get a class instance'
class_instance = class_name()
print '\r'
print "My name is class_instance, I can call class_method, " \
      "statics_method, instance_method and instance_method, but I can't call ordinary_function"
print "I can show you:"
print '\r'
class_instance.class_method('class method is calling!!')
print '\r'
class_instance.static_method('static method in calling!!')
print '\r'
class_instance.instance_method('instance method is calling!!')
print '\r'
print 'class var is calling!!'
print class_instance.class_var
print '\r'
print 'instance var is calling!!'
print class_instance.instance_var
print '\r'
print 'Get a class!!'
print '\r'
print 'My name is class_name, I can call class_method, statics_method, instance_method, instance_method, and ordinary_function'
print "I can show you:"
print '\r'
class_name.class_method('class method is calling!!')
print '\r'
class_name.static_method('static method in calling!!')
print '\r'
#class_name.instance_method("instance method can't be calling!!")
print '\r'
print 'class var is calling!!'
print class_name.class_var
print '\r'
print 'instance var is calling!!'
print class_name.instance_var
print 'END!!'

Result:

Get a class instance

 

My name is class_instance, I can call class_method, statics_method, instance_method and instance_method, but I can't call ordinary_function
I can show you:

 

I am class method, I can visit class var and instance var
I am class method, I am modifying the instance var
class method is calling!!
I am class method, I am modifying the class var
class method is calling!!

 

I am static method, I am the Adopted son(干儿子) for this class!!
I can't modify anything in the class

 


class var is calling!!
I am a class variable

 

instance var is calling!!
I am a instance varibale

 

Get a class!!

 

My name is class_name, I can call class_method, statics_method, instance_method, instance_method, and ordinary_function
I can show you:

 

I am class method, I can visit class var and instance var
I am class method, I am modifying the instance var
class method is calling!!
I am class method, I am modifying the class var
class method is calling!!

 

I am static method, I am the Adopted son(干儿子) for this class!!
I can't modify anything in the class

 


class var is calling!!
I am a class variable

 

instance var is calling!!
class method is calling!!
END!!

复制代码

 

类变量:

        类定义内部定义的变量(愚见,可以认为类内部没有self开头定义的变量,可以认为是类变量)

e.g. class_name中的class_var = 'I am a class variable' #类变量

 

成员变量:

         类定义内部__init__函数内以self开头定义的变量

          

e.g. self.instance_var = 'I am a instance varibale'  #成员变量(实例变量)

 

 

静态变量:

          因为Python是动态语言,不存在完全静态的变量,这个概念查阅相关资料后认为指的就是类内部定义的类变量(欢迎指正)

类方法:

          类内部定义的以@classmethod装饰的函数是类方法,类方法的调用关系可以通过print后的表述得知。

复制代码

e.g. 
    @classmethod
    def class_method(cls, formal_parameter): #类方法
        print 'I am class method, I can visit class var and instance var'

        print 'I am class method, I am modifying the instance var'
        cls.instance_var = formal_parameter
        print cls.instance_var

        print 'I am class method, I am modifying the class var'
        class_var = formal_parameter
        print class_var

复制代码

 

静态方法:

          类内部定义的以@staticmethod装饰的函数,类方法的调用关系可以通过print后的表述得知。

复制代码

e.g.
    @staticmethod
    def static_method(formal_parameter):
        print 'I am static method, I am the Adopted son(干儿子) for this class!!'

        print "I can't modify anything in the class "
        #print class_var
        #print self.instance_var

复制代码

实例方法:

          类内部定义的没有装饰器且第一个参数为self的函数,类方法的调用关系可以通过print后的表述得知。

e.g.
 def instance_method(self,  formal_parameter):
        local_var_in_function = formal_parameter    #实例方法局部变量
        self.local_var_also_in_function = formal_parameter  #实例方法局部变量

普通函数:

          类内部定义的既没有装饰器,也没有参数self的函数,类方法的调用关系可以通过print后的表述得知。

e.g.
def ordinary_function(formal_parameter):
        print "I am an ordinary function, I can't vist class var and intance var"
        print self.instance_var #报错,因此普通函数无法访问成员函数
        print clacc_var#报错,因此普通函数无法访问类变量

[1]. http://www.cnblogs.com/kex1n/p/5979366.html

[2]. http://www.cnblogs.com/funfunny/p/5892212.html

[3]. http://blog.csdn.net/linda1000/article/details/8710161

[4]. http://blog.csdn.net/gzhouc/article/details/46785797

[5]. http://blog.csdn.net/xhw88398569/article/details/48976001

[6]. http://www.cnblogs.com/Simon-xm/p/3890942.html

你可能感兴趣的:(python)