python调用私有属性的方法总结


Posted in Python onJuly 24, 2020

当我们定义一个类的时候,有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么?同样为私有属性,有的开发语言中是真私有属性,有的是假私有属性。

例如 :在 OC 开发过程中出现的私有属性就是假私有属性,通过 runtime 可以很方便拿到私有属性并进行修改。同出师门,swift 中的私有属性就是真私有属性,通常需要 private 来修饰。

那么在 python 开发中,我们如何来定义一个私有属性呢?作为约定俗成,我们通常在属性的前面加两个下划线,即__age就代表是一个私有属性。

也许你会有疑问,这个属性是真私有属性还是假私有属性?

首先我们定义一个类,并在该类中初始化两个属性,其中一个为私有属性。如下所示:

class Person(object):
# 构造函数
def __init__(self, name):
    self.name = name
    self.__age = 18

创建一个对象,并给初始化name 属性。

obj = Person("lily")
print(obj.name)

运行该模块就会打印出:lily

那么私有属性该如何访问:

print(obj.__age)

运行模块之后,控制台会打印出:

'Person' object has no attribute '__age'

既然 age作为私有属性,所以该属性就不能直接访问。

正确调用方法为:

print(obj._Person__age)

控制台就可以打印出:18

同样,可以重新给私有属性赋值

obj._Person__age = 20

print(obj._Person__age)

控制台就可以打印出:20

如果我们另外创建一个类并继承 Person,该如何访问自己的私有属性并做修改呢?

class Student(Person):
    def __init__(self):
        self.__gender = 'male'
        stu = Student()
        print(stu._Student__gender)

控制台会打印出来:male

如果访问父类的私有属性呢?

print(stu._Person__age)

这个时候,控制台会打印:'Student' object has no attribute '_Person__age'

这进一步证明了,私有属性是无法被继承的。

由此可知,在 Python 中私有属性为假私有属性。那为什么不从语法上保证 private 字段的私密性呢?用最简单的一句话来说:We are all consenting adults here。正如Python 程序员的观点:开放要比封闭好。

综上所述:

Python 编译器无法严格保证 private 字段的私密性。

只有当子类不受自己控制的时候,才可以考虑使用 private 属性来避免名称冲突。

实例扩展:

#! encoding=UTF-8
 
class A:
  def __init__(self):
    
    # 定义私有属性
    self.__name = "wangwu"
    
    # 普通属性定义
    self.age = 19
    
a = A()
 
# 正常输出
print a.age
 
# 提示找不到属性
print a.__name

执行输出:

Traceback (most recent call last):
File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 19, in <module>
print a.__name
AttributeError: A instance has no attribute '__name'

到此这篇关于python调用私有属性的方法总结的文章就介绍到这了,更多相关python怎么调用私有属性内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python冒泡排序算法的实现代码
Nov 21 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
python后端接收前端回传的文件方法
Jan 02 Python
python从入门到精通 windows安装python图文教程
May 18 Python
python装饰器常见使用方法分析
Jun 26 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
python:动态路由的Flask程序代码
Nov 22 Python
django框架中间件原理与用法详解
Dec 10 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
python在package下继续嵌套一个package
Apr 14 Python
python中取绝对值简单方法总结
Jul 24 #Python
python代码能做成软件吗
Jul 24 #Python
深入了解Python 变量作用域
Jul 24 #Python
详解Python IO编程
Jul 24 #Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 #Python
基于opencv的selenium滑动验证码的实现
Jul 24 #Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 #Python
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
python实现的简单抽奖系统实例
2015/05/22 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
女子职高个人自荐书
2014/02/01 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
单位收入证明范本
2015/06/18 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers