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统计列表中的重复项出现的次数的方法
Aug 18 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
什么是python的列表推导式
May 26 Python
Pycharm github配置实现过程图解
Oct 13 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
python性能测试工具locust的使用
Dec 28 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函数
2008/10/03 PHP
js 操作符实例代码
2009/10/24 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python sort、sort_index方法代码实例
2019/03/28 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python中取绝对值简单方法总结
2020/07/24 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
介绍一下SQL Server的全文索引
2013/08/15 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
总裁秘书岗位职责
2013/12/04 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
体育课外活动总结
2014/07/08 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
以下牛机,你有几个
2022/04/05 无线电
MongoDB数据库之添删改查
2022/04/26 MongoDB