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 optparse模块使用实例
Apr 09 Python
Python探索之修改Python搜索路径
Oct 25 Python
简单了解Python中的几种函数
Nov 03 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
python实现简单淘宝秒杀功能
May 03 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
python 子类调用父类的构造函数实例
Mar 12 Python
深度学习小工程练习之垃圾分类详解
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
详解YII关联查询
2016/01/10 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
js 幻灯片的实现
2011/12/06 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
python实现上传下载文件功能
2020/11/19 Python
python通过zabbix api获取主机
2018/09/17 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python如何查看微信消息撤回
2018/11/27 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python+OpenCV实现图像拼接
2020/03/05 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
Araks官网:纽约内衣品牌
2020/10/15 全球购物
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL