Python —类变量、实例变量、成员变量、局部变量、全局变量

Python —类变量和实例变量

变量一词在python语言中其实叫法不算准确,因为其他语言都叫变量,所以很多编程者依旧叫变量,其实在Python叫对象和属性。

1、Python 一切皆对象
所以类也可以看作对象,类定义完成后,会在当前作用域中定义一个以类名为名字的类对象。

class DogClass():
    print("This is a class")
    pass

运行结果

This is a class

2、实例变量和类变量
实例变量是对于每个实例都独有的数据,类变量是一个类所有实例共享的属性和方法

class DogClass():
    print("This is a class")
    address = 'Beijing'  # address就是一个类变量( class里def外,通过变量名能被赋值)

    def __init__(self, name, age):
        self.name = name ##类的设计时;def里通过self点运算变量名能被赋值
        self.age = age


    def disp_dog_info(self):
    	#使用class_name.attr_name的方式引用类变量
        print('My dog\'s name is {}, {} yesrs old, come from {}.'.format(self.name, self.age,
                                                                         DogClass.address))  

    def mod_dog_info(self, age_new, addr_new):
        self.age = age_new 
        DogClass.address = addr_new #def里通过类对象即类名字的点运算变量名可被赋值

print("")
my_dog1 = DogClass('WangWang', 4)#实例化
my_dog2 = DogClass('PangPang', 3)#实例化
my_dog1.disp_dog_info()#
my_dog2.disp_dog_info()

print("")
my_dog1.mod_dog_info(1, 'Shanghai')
my_dog1.disp_dog_info()
my_dog2.disp_dog_info()

print("")
DogClass.address = 'ShenZhen' ##程序里:通过类对象(类名字)的点运算类名字也可被赋值
my_dog1.disp_dog_info()
my_dog2.disp_dog_info()

print("")
my_dog2.name = 'HuaHua' # 程序里;通过实例对象的点运算变量名可被赋值
my_dog2.disp_dog_info()

运行结果

This is a class

My dog's name is WangWang, 4 yesrs old, come from Beijing.
My dog's name is PangPang, 3 yesrs old, come from Beijing.

My dog's name is WangWang, 1 yesrs old, come from Shanghai.
My dog's name is PangPang, 3 yesrs old, come from Shanghai.

My dog's name is WangWang, 1 yesrs old, come from ShenZhen.
My dog's name is PangPang, 3 yesrs old, come from ShenZhen.

My dog's name is HuaHua, 3 yesrs old, come from ShenZhen.

结合上面的代码和注释看:
(1)DogClass是一个类,执行过类的定义后,DogClass也成为一个类对象
(2)address 是类变量,可以通过类对象的点运算变量名使用
(3)my_dog1 、my_dog2时类的实例化,即实例
(4) self.name、 self.age是实例变量,每个实例化对象的self.name 和self.age是不一样的。

3、类对象、类变量支持的操作:
(1)类对象使用:

  • 实例化;使用instance_name = class_name()的方式实例化,实例化操作创建该类的实例。

  • 变量引用;使用class_name.attr_name的方式引用类变量。

(2)类变量被赋值

  • 类的设计里: 1、class里def外,通过变量名能被赋值;2、def里通过类对象即类名字的点运算变量名可被赋值(class_name.attr_name)
  • 程序里:通过类对象(类名字)的点运算类名字也可被赋值

(3)实例对象使用
实例对象是类对象实例化的产物,实例对象仅支持一个操作:

  • 变量引用;与类变量引用的方式相同,使用instance_name.attr_name的方式。

(4)实例对象变量使用
类的设计时;def里通过self点运算变量名能被赋值,不一定非在init里,其他已被调用的方法函数里也行
程序里;通过实例对象的点运算变量名可被赋值

综上:类变量是所有实例对象共享数据,有点像C语言的全局变量,修改后所有都修改
实例变量是具体某一个实例的,不同实例之间,实例变量没有关系

4、成员变量、局部变量、全局变量
1、成员变量=类变量、实例变量(实质一回事,叫法不同而已)
总结就是:格式是点运算的变量如(class_name.attr_name、instance_name.attr_name)
2、局部变量、全局变量看下面代码

max_num = 0 #全局变量

class ComClass():
    def __init__(self,num1, num2):
        self.num1 = num1
        self.num2 = num2

    def compare_max(self):
        tmp = 0 #局部变量
        if self.num1 >= self.num2:
            tmp = self.num1
        else:
            tmp = self.num2

        return tmp

com_num = ComClass(2,5)
max_num = com_num.compare_max()

print(max_num)

运行结果

5
    原文作者:海淀阿朗
    原文地址: https://blog.csdn.net/weixin_43056298/article/details/102921130
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞