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中动态获取对象的属性和方法的教程
Apr 09 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
代码详解django中数据库设置
Jan 28 Python
Python中的四种交换数值的方法解析
Nov 18 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Django 实现图片上传和下载功能
Dec 31 Python
通用的Django注册功能模块实现方法
Feb 05 Python
深度学习小工程练习之垃圾分类详解
Apr 14 Python
python 提取html文本的方法
May 20 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写的求多项式导数的函数代码
2012/07/04 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python支持多线程的爬虫实例
2019/12/21 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
家长评语和期望
2014/02/10 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
合同纠纷调解书
2015/05/20 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers