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中私有属性的定义方式相关推荐

  1. python私有变量和继承_python中私有变量的继承

    在python中继承时,私有变量出现以下错误:AttributeError: 'dog' object has no attribute '_dog__name' 我找了很多东西,但不知道我的问题在哪 ...

  2. python定义私有变量的方法_Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  3. python定义私有变量的方法_Python私有变量的定义方法

    学过编程语言的人员,都知道私有变量在编程中必不可少,与Java和C语言用private关键字定义私有变量不同,Python是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能 ...

  4. python定义私有变量的方法_Python怎么修改私有属性 如何访问python类中的私有方法...

    python 类为什么不能定义私有属性和方法 因为b.name[0] = 'zhang'修改的是类属性,类属性是全局的,所有的实例共享,如果想私有化,可以添加 def __init__( self ) ...

  5. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

  6. python定义私有变量的方法_Python类如何定义私有变量

    这篇文章主要介绍了Python类如何定义私有变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 在java 的类中,如果你要定义一个私有变量, ...

  7. python标准库os的方法_Python中标准库OS的常用方法总结大全

    前言 我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数.在写一些系统脚本或者自动化运维脚本的时候经常会用到这个 os 库,所以这里做个整理, ...

  8. python可变参数函数二阶导数公式_Python中函数的参数定义和可变参数

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...

  9. python子类如何调用父类方法_python中子类调用父类函数的方法示例

    前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...

  10. python定义私有变量的方法_浅谈Python中的私有变量

    私有变量表示方法 在变量前加上两个下划线的是私有变量.class Teacher(): def __init__(self,name,level): self.__name=name self.__l ...

最新文章

  1. LeetCode 56. Merge Intervals
  2. 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)
  3. 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )
  4. python PIL.Image获取图像像素时, 图像的原点及x,y的方向
  5. 【白话机器学习】算法理论+实战之Xgboost算法
  6. 参赛作品介绍 | IM体感游戏、校园管家...这些创意颠覆你的想象!
  7. AE CreateFeatureClass 创建shp. 删除shp. 向shp中添加要素
  8. GraphX实现N度关系
  9. CSS中min-height:100%问题
  10. Educational Codeforces Round 61
  11. 【软件开发架构平台】CH2 Spring IoC和Bean管理
  12. SpringBoot 发送邮件和附件(实用版)
  13. 什么品牌的台灯适合学生用?适合学生党用的台灯推荐
  14. 会议OA项目(三)---我的会议(会议排座、送审)
  15. Flow-3D二次开发入门 教程
  16. ipv6dns服务器无法响应,ipv6获取不到网关和dns服务器
  17. NOIP模拟测试19
  18. 全票通过!微众开源项目EventMesh进入Apache孵化器
  19. 【周赛】第一周周赛——欢迎16级的新同学题解(题目出自codeforces 318A,546A,431C,665E,HDU 4104)
  20. LXD 2.0系列之二:LXD安装和配置

热门文章

  1. 使用C#的unsafe加快处理图像速度
  2. 总结搜索型手工注入的全过程
  3. 1.Docker技术入门与实战 --- 初识Docker与容器
  4. 6.支付平台架构:业务、规划、设计与实现 --- 安全与风控
  5. 9.1 Zend_Json
  6. jsp include参数传送接收与应用
  7. Struts xml中Action的method与路径的三种匹配方法
  8. day 34 进程线程排序 抢票 初级生产者消费者
  9. 关于自增自减的理解2(例子)
  10. Jquery—Jquery中$与$.fn的区别