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 struct.unpack
Sep 06 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python实现用户答题功能
Jan 17 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Django 响应数据response的返回源码详解
Aug 06 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Pytest allure 命令行参数的使用
Apr 18 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+DBM的同学录程序(4)
2006/10/09 PHP
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
详解Python中for循环的使用
2015/04/14 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
python僵尸进程产生的原因
2017/07/21 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
Pytorch to(device)用法
2020/01/08 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
室内拓展活动方案
2014/02/13 职场文书
招聘专员岗位职责
2014/03/07 职场文书
信访工作汇报材料
2014/10/27 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python
Python 中面向接口编程
2022/05/20 Python