私有化

Python中属性的分类

在Java中可以通过private关键字定义私有变量,Python中则通过变量名定义的格式来区分变量的访问权限

Python的类中,可以定义5种形式的变量,其功能各不相同,它们的区分依靠变量名的定义格式(Java转过来的表示这个真的很吓到我了)

格式 分类
xx 公有变量
_xx 私有属性或⽅法
__xx 私有属性或⽅法
__xx__ 魔法对象或属性,写程序时不能定义这种类型的方法或属性
xx_ 普通变量,⽤于避免与Python关键词冲突

_xx__xx 的区别

_xx__xx 都是私有方法和属性的定义格式,但是它们有微小的不同,_xx 格式定义的私有方法属性不能通过from somemodule import * 的方法导入模块,但如果使用import somemodule 的方式导入模块,则两者的效果相同

私有属性和方法能够做到使得外部不能访问的原因是Python解释器在私有方法属性定义后对其做了名称重整,就是把他们的名字做了简单的修改使得在外部因为名称不同而无法调用

property关键字的使用

getter,setter方法

对于类中定义的私有变量,一般会定义getter,setter方法,使得在类外可以调用这两个方法访问私有变量

class Money(object):def __init__(self):self.__money = 0def getMoney(self):return self.__moneydef setMoney(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型数字")m = Money
m.setMoney(m,5)
print(m.getMoney(m))

使用property关键字简化getter,setter方法

class Money(object):def __init__(self):self.__money = 0def getMoney(self):return self.__moneydef setMoney(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型数字")#添加一条property语句money = property(getMoney, setMoney)m = Money
m.money = 5
print(m.money)

使用property语句后,就不需要调用getter,setter方法即可取值和赋值了,对私有属性的访问就简化了

使用property装饰器

class Money(object):def __init__(self):self.__money = 0@propertydef money(self):return self.__money@money.setterdef money(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型数字")m = Money
m.money = 5
print(m.money)

使用property装饰器,方法的定义可以简化

Python基础语法-03-私有化相关推荐

  1. python基础之---03基本语法

    python基础之---03基本语法 一:编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. # -*- coding: utf-8 -*- 也 ...

  2. python变量类型-【干货】Python基础语法之变量类型

    原标题:[干货]Python基础语法之变量类型 还没关注? 01 Python编码 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错. 解决 ...

  3. Python基础语法笔记

    文章目录 前言 1.变量.运算符与数据类型 1.1 注释 1.2 运算符 1.3 变量与赋值 1.4 数据类型与转换 1.5 print()函数 2.位运算 2.1 原码.反码和补码 2.2 利用位运 ...

  4. python:python基础语法三,列表、元组、字典、集合

    python基础语法 文章目录 python基础语法 列表(list) 列表简介 切片 列表修改元素 列表的方法 遍历列表 序列(sequence) 序列的基本操作 range()函数 EMS(Emp ...

  5. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  6. 吾八哥学Python(四):了解Python基础语法(下)

    咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型 大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary ...

  7. Python 基础语法_Python脚本文件结构

    目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...

  8. python使用缩进作为语法边界-重庆铜梁高校邦数据科学通识课【Python基础语法】答案...

    重庆铜梁高校邦数据科学通识课[Python基础语法]答案it8p 重庆铜梁高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:网课,智慧树,知到,超星,尔雅,学习通 ...

  9. python基础语法 第0关print-徐州鼓楼高校邦数据科学通识课【Python基础语法】答案...

    徐州鼓楼高校邦数据科学通识课[Python基础语法]答案it8p 徐州鼓楼高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学 ...

  10. python基础语法 第0关print-重庆酉阳高校邦数据科学通识课【Python基础语法】答案...

    重庆酉阳高校邦数据科学通识课[Python基础语法]答案it8p 重庆酉阳高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学 ...

最新文章

  1. 关联规则推荐及Apriori算法
  2. nano在CentOS上的安装和使用
  3. 笔记本输入法, u、i 等字母变成了数字
  4. mysql截取字符串最后两位_Mysql字符串截取函数SUBSTRING的用法说明
  5. 收藏 | 北大华为鹏城联合首次提出视觉 Transformer 后量化算法!
  6. angular6 中使用bootstrap
  7. 历经十年,Windows 7 生命周期将结束,微软:快换 Windows 10
  8. 组织架构递归_映射架构和递归管理数据–第2部分
  9. 《南溪的目标检测学习笔记》——DCN(DCNv2)的学习笔记
  10. 【C/C++】C/C++中Static的作用详述
  11. source insight技巧
  12. 上市公司高管CEO员工数据大全 1991-2021年上市公司高管CEO教育背景学历结构薪酬职务任期年龄出生地 员工学历结构人员结构
  13. android思维导图软件推荐,好用的思维导图软件,安卓思维导图软件哪个好
  14. word打开老是配置进度_打开word2010总是出现配置进度怎么办_打开word2010出现配置进度的解决方法-系统城...
  15. 经典游戏PK:魔兽争霸VS星际争霸VS红警
  16. 工信部191号文《App违法违规收集使用个人信息行为认定方法》
  17. 【乐逍遥网站设计】2022年网站设计与UI元素的趋势
  18. ntfs格式分区是什么意思
  19. ubuntu 安装kali_如何在Linux,Windows,Kali,Ubuntu,Mint和示例中安装和使用exiftool
  20. 星星之火-36:LTE载波载波的间隔是15K, 载波波的带宽是多少? 15K还是30K?

热门文章

  1. 鸿蒙系统适配机型_华为官宣鸿蒙系统,麒麟960等五十多款旗舰机型可以直接升级...
  2. mysql sql优化与调优机制详解_MySQL性能调优——锁定机制与锁优化分析详解
  3. TypeScript:运算符
  4. python_四元数q转旋转矩阵R(已验证)
  5. 2022年新版YOLO解读(PP-YOLOE)
  6. ICCV'21 Oral|拒绝调参,显著提点!检测分割任务的新损失函数RS Loss开源
  7. ROS下sensor_msgs::ImagePtr到sensor_msgs::Image之间的转换
  8. redis源码解析之事件驱动
  9. HTML学习笔记——DOCTYPE和DTD,标准模式和兼容模式
  10. Andorid Kernel 编译测试