Python 私有化操作实例分析


Posted in Python onNovember 21, 2019

本文实例讲述了Python 私有化操作。分享给大家供大家参考,具体如下:

私有化

xx: 公有变量
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
_xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
xx:双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字
xx:单后置下划线,用于避免与Python关键词的冲突

通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。

#coding=utf-8
class Person(object):
  def __init__(self, name, age, taste):
    self.name = name
    self._age = age 
    self.__taste = taste
  def showperson(self):
    print(self.name)
    print(self._age)
    print(self.__taste)
  def dowork(self):
    self._work()
    self.__away()
  def _work(self):
    print('my _work')
  def __away(self):
    print('my __away')
class Student(Person):
  def construction(self, name, age, taste):
    self.name = name
    self._age = age 
    self.__taste = taste
  def showstudent(self):
    print(self.name)
    print(self._age)
    print(self.__taste)
  @staticmethod
  def testbug():
    _Bug.showbug()
# 模块内可以访问,当from cur_module import *时,不导入
class _Bug(object):
  @staticmethod
  def showbug():
    print("showbug")
s1 = Student('jack', 25, 'football')
s1.showperson()
print('*'*20)
# 无法访问__taste,导致报错
# s1.showstudent() 
s1.construction('rose', 30, 'basketball')
s1.showperson()
print('*'*20)
s1.showstudent()
print('*'*20)
Student.testbug()

Python 私有化操作实例分析

总结

父类中属性名为__名字的,子类不继承,子类不能访问
如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
_名的变量、函数、类在使用from xxx import *时都不会被导入

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
玩转python爬虫之URLError异常处理
Feb 17 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
flask框架视图函数用法示例
Jul 19 Python
使用python进行拆分大文件的方法
Dec 10 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
python中shell执行知识点
May 06 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
python解析照片拍摄时间进行图片整理
Jul 23 Python
使用python的turtle绘画滑稽脸实例
Nov 21 #Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 #Python
Python 类的魔法属性用法实例分析
Nov 21 #Python
python画蝴蝶曲线图的实例
Nov 21 #Python
Python 静态方法和类方法实例分析
Nov 21 #Python
Python 用turtle实现用正方形画圆的例子
Nov 21 #Python
python 实现兔子生兔子示例
Nov 21 #Python
You might like
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php jsonp单引号转义
2014/11/23 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
php短信接口代码
2016/05/13 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python迭代和迭代器详解
2016/11/10 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
详解用python生成随机数的几种方法
2019/08/04 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
浅析python 字典嵌套
2020/09/29 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
中学生旷课检讨书500字
2014/10/29 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android