python定义私有变量的方法_Python中私有属性的定义方式
Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.
示例代码:
class Vector2D(object):
def __init__(self, x, y):
self.__x = float(x)
self.__y = float(y)
self.xx = x
self.yy = y
def get_x(self):
return self.__x # 内部访问
if __name__ == "__main__":
v = Vector2D(3, 4)
print v.__dict__
print v._Vector2D__x, v.get_x()# 但是可以通过v._Vector2D__x 在外部访问
v.__x # 外部访问
输出:
{'yy': 4, 'xx': 3, '_Vector2D__x': 3.0, '_Vector2D__y': 4.0}
3.0 3.0
Traceback (most recent call last):
...
v.__x
AttributeError: 'Vector2D' object has no attribute '__x'
从上面的例子可以看出:
1. __field被编译器重命名为_className__field
2. 在class外部不能访问obj.__field, 但在class内部可以
3. 但是, 这只能防止无意间的调用, 不能防止恶意调用, 用Fluent Python的话来讲, 这是一种safety device, not security device, 用国语来讲, 就是防君子不防xx, 因为可以通过obj._className__field在外部访问obj的私有__field.
补充知识:python中私有属性和私有方法,修改私有属性的值
如果一个属性是以两个下划线开始 就标识这个这个属性是一个私有属性
self.__money = 1000000
如果一个方法是以两个下划线开始 也代表已经私有
子类继承了父类 如果父类的属性私有 将不会被子类继承
私有属性和私有方法可以在类的里面使用
自定义类中 如果一个属性进行了私有 在类的外面不能调用
修改私有属性的值
如果需要修改一个对象的属性值,通常有2种方法
对象名.属性名 = 数据 ----> 直接修改
对象名.方法名() ----> 间接修改
私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。
class Person(object):
def __init__(self):
self.name = "小明"
self.__age = 20
#获取私有属性的值
def get_age(self):
return self.__age
#设置私有属性的值
def set_age(self, new_age):
self.__age = new_age
#定义一个对象
p = Person()
#强行获取私有属性
#崇尚一切靠自觉
print(p._Person__age)
print(p.name)
#想在类的外面获取对象的属性
ret = p.get_age()
print(ret)
#想在类的外面修改对象私有属性的值
p.set_age(30)
print(p.get_age())
以上这篇Python中私有属性的定义方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
时间: 2020-03-05
python定义私有变量的方法_Python中私有属性的定义方式相关推荐
- python私有变量和继承_python中私有变量的继承
在python中继承时,私有变量出现以下错误:AttributeError: 'dog' object has no attribute '_dog__name' 我找了很多东西,但不知道我的问题在哪 ...
- python定义私有变量的方法_Python类中的 私有变量和私有方法
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...
- python定义私有变量的方法_Python私有变量的定义方法
学过编程语言的人员,都知道私有变量在编程中必不可少,与Java和C语言用private关键字定义私有变量不同,Python是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能 ...
- python定义私有变量的方法_Python怎么修改私有属性 如何访问python类中的私有方法...
python 类为什么不能定义私有属性和方法 因为b.name[0] = 'zhang'修改的是类属性,类属性是全局的,所有的实例共享,如果想私有化,可以添加 def __init__( self ) ...
- python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...
本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...
- python定义私有变量的方法_Python类如何定义私有变量
这篇文章主要介绍了Python类如何定义私有变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 在java 的类中,如果你要定义一个私有变量, ...
- python标准库os的方法_Python中标准库OS的常用方法总结大全
前言 我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数.在写一些系统脚本或者自动化运维脚本的时候经常会用到这个 os 库,所以这里做个整理, ...
- python可变参数函数二阶导数公式_Python中函数的参数定义和可变参数
刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...
- python子类如何调用父类方法_python中子类调用父类函数的方法示例
前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...
- python定义私有变量的方法_浅谈Python中的私有变量
私有变量表示方法 在变量前加上两个下划线的是私有变量.class Teacher(): def __init__(self,name,level): self.__name=name self.__l ...
最新文章
- LeetCode 56. Merge Intervals
- 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)
- 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )
- python PIL.Image获取图像像素时, 图像的原点及x,y的方向
- 【白话机器学习】算法理论+实战之Xgboost算法
- 参赛作品介绍 | IM体感游戏、校园管家...这些创意颠覆你的想象!
- AE CreateFeatureClass 创建shp. 删除shp. 向shp中添加要素
- GraphX实现N度关系
- CSS中min-height:100%问题
- Educational Codeforces Round 61
- 【软件开发架构平台】CH2 Spring IoC和Bean管理
- SpringBoot 发送邮件和附件(实用版)
- 什么品牌的台灯适合学生用?适合学生党用的台灯推荐
- 会议OA项目(三)---我的会议(会议排座、送审)
- Flow-3D二次开发入门 教程
- ipv6dns服务器无法响应,ipv6获取不到网关和dns服务器
- NOIP模拟测试19
- 全票通过!微众开源项目EventMesh进入Apache孵化器
- 【周赛】第一周周赛——欢迎16级的新同学题解(题目出自codeforces 318A,546A,431C,665E,HDU 4104)
- LXD 2.0系列之二:LXD安装和配置