python 类变量

604 篇文章 8 订阅
579 篇文章 5 订阅

python的类中,类的属性有两种作用域:类变量,实例变量。Python中是不支持静态变量的,但是我们可以通过函数的默认值来实现静态变量的功能

类变量紧接在类名后面定义,相当于java和c++的static变量

实例变量在__init__里定义,相当于java和c++的普通变量

类似于java中的static变量与一般变量的区别。

类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。


类变量和实例变量在操作上的区别

  1. 访问权限

    • 类变量通过类名点操作访问也可以通过实例点操作访问className.var objectName.var

    • 实例变量只可以通过实例名点操作访问 objectName.var

  1. 类变量修改后的表现

    • 通过className.var修改类变量,该类和所有实例所共享的数据将被修改,再次通过类或实例访问得到的将是新的数据。

    • 通过objectName.var修改类变量,其效果将仅仅作用在该实例上,再次通过类或其它实例访问得到的仍然是旧的数据但这一修改方式将对该类变量实例化,其结果是该实例将得到一个单独的该变量拷贝,此后此对象不再与类共享改名称的变量

<span style="font-size:18px;">    # -*- coding:utf-8 -*-
    class Student:
        grade=1
        
        def __init__(self,name):
            self.name = name
            
    student1=Student("king")
    print student1.grade,student1.name,Student.grade
    #student1.grade=2#在这里改对student2没影响
<span style="color:#FF0000;">    Student.grade=2 #通过类名改就会影响到了</span>
         
    student2=Student("jack")
    print student2.grade,student2.name,student2.grade
    输出:
    1 king 1
    2 jack 2</span>

给C++/Java/C#程序员的注释
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。
同样,注意__del__方法与 destructor 的概念类似。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值