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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
python如何将图片转换为字符图片
Aug 19 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
python多线程使用方法实例详解
Dec 30 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
Python sublime安装及配置过程详解
Jun 29 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
Django日志及中间件模块应用案例
Sep 10 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
JSONP基础知识详解
2017/03/19 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
活动总结范文
2014/08/30 职场文书
2014年业务工作总结
2014/11/17 职场文书
2014年维修工作总结
2014/11/22 职场文书
答谢词范文
2015/01/05 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python