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时间模块datetime、time、calendar的使用方法
Jan 13 Python
python实现分页效果
Oct 25 Python
python针对excel的操作技巧
Mar 13 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
python 字符串常用函数详解
Sep 11 Python
Python数据持久化存储实现方法分析
Dec 21 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python的help函数如何使用
Jun 11 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python爬虫工具例举说明
Nov 30 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python实现udp传输图片功能
2020/03/20 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
介绍一下linux的文件系统
2015/10/06 面试题
毕业生如何写自我鉴定
2014/03/15 职场文书
护理专科学生自荐书
2014/07/05 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL