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遍历目录树实现方法
May 22 Python
Python制作简单的网页爬虫
Nov 22 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
django实现类似触发器的功能
Nov 15 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue实现选中效果
2020/10/07 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python字符串处理实现单词反转
2017/06/14 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
python实现微信打飞机游戏
2020/03/24 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Django权限控制的使用
2021/01/07 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
开办饭店创业计划书
2013/12/28 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
施工工地安全标语
2014/06/07 职场文书
教育教学读书笔记
2015/07/02 职场文书
趣味运动会标语口号
2015/12/26 职场文书
小学班主任培训心得体会
2016/01/07 职场文书