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中的装饰器用法详解
Jan 14 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
Python实现的科学计算器功能示例
Aug 04 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
python爬取淘宝商品详情页数据
Feb 23 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
Python基于mysql实现学生管理系统
Feb 21 Python
详解pandas的外部数据导入与常用方法
May 01 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
python 瀑布线指标编写实例
Jun 03 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
php cookie 登录验证示例代码
2009/03/16 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
初步讲解Python中的元组概念
2015/05/21 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
写好自荐信的要点
2013/11/06 职场文书
大学四年规划书范文
2013/12/27 职场文书
食堂个人先进事迹
2014/01/22 职场文书
体育课课后反思
2014/04/24 职场文书
团队队名口号大全
2014/06/06 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
2015毕业寄语大全
2015/02/26 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle