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 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
一个简单的python程序实例(通讯录)
Nov 29 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python书单 不将就
Jul 11 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
Python之时间和日期使用小结
Feb 14 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
详解python-图像处理(映射变换)
Mar 22 Python
Python socket模块方法实现详解
Nov 05 Python
如何实现更换Jupyter Notebook内核Python版本
May 18 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
python 如何用terminal输入参数
May 25 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
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python通过future处理并发问题
2017/10/17 Python
python实现Zabbix-API监控
2018/09/17 Python
Python List cmp()知识点总结
2019/02/18 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
广告创意求职信
2014/03/17 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
秋季运动会开幕词
2015/01/28 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
亮剑观后感500字
2015/06/05 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏