浅谈Python中的私有变量

yipeiwu_com7年前Python基础

私有变量表示方法

在变量前加上两个下划线的是私有变量。

class Teacher():
  def __init__(self,name,level):
    self.__name=name
    self.__level=level

  #获取老师的等级
  def get_level(self):
    return self.__level

  #获取名字
  def get_in_name(self):
    return self.__name

动态方法无法读取私有变量

即使是动态方法也无法读取私有变量,强行读取会报错。

#定义动态方法
def get_name(self):
  return self.__name

#动态方法赋值
Teacher.get_name=get_name


t=Teacher("GG",5)

print("level is: ",t.get_level())    #可行
print("name is",t.get_name())      #报错,显示没有该属性

动态方法无法修改私有变量

动态方法也无法修改私有变量,强行修改不会报错,但是没有效果。

t.set_name("NN")        #实际没有效果但是不报错
print(t.get_in_name())     #类内部获取名字,输出GG

强行读取和修改私有变量

那么强行要读取和改变私有变量怎么办呢?

有一个不推荐但是可行的办法:

私有属性在对象内部被名字是”类名_属性名”。

在这个例子里,是这样的:

print("name is",t._Teacher__name)      #输出GG
t._Teacher__name="AA"            #被改变了
print("name is",t._Teacher__name)      #输出AA

相关文章

Django中对通过测试的用户进行限制访问的方法

限制访问可以基于某种权限,某些检查或者为login视图提供不同的位置,这些实现方式大致相同。 一般的方法是直接在视图的 request.user 上运行检查。 例如,下面视图确认用户登...

Python操作MongoDB数据库PyMongo库使用方法

引用PyMongo 复制代码 代码如下: >>> import pymongo 创建连接Connection 复制代码 代码如下: >>> impo...

浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

使用摄像头追踪人脸由于血液流动引起的面部色素的微小变化实现实时脉搏评估。 效果如下(演示视频):  由于这是通过比较面部色素的变化评估脉搏所以光线、人体移动、不同角度、不同...

python中用logging实现日志滚动和过期日志删除功能

logging库提供了两个可以用于日志滚动的class(可以参考https://docs.python.org/2/library/logging.handlers.html),一个是R...

python正则表达式匹配不包含某几个字符的字符串方法

一、匹配目标 文件中所有以https?://开头,以.jpg|.png|.jpeg结尾的字符串 二、尝试过程 1)        自然想到...