类的私有属性和方法

Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有。

Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。

class Test(object):

__count = 0 # 私有属性 __count

def get_count(self):

return self.__count # 类的内部可以使用私有属性

def set_count(self, value):

if self.__check_value(value): # 在类的内部调用类的私有方法

self.__class__.__count = value

def __check_value(self, value): # 定义类的私有方法 检查参数

if isinstance(value, int):

return True

a = Test()

print(a.get_count())

a.set_count(100)

print(a.get_count())

#a.__check_value(10) # 调用私有方法会报错

#print(a.__count)# 直接访问私有属性也会报错

应用场景

对于一些敏感的数据,我们不希望直接被的函数调用,或者不希望草率的直接object.key = value 来修改,我们可以选择将属性声名为私有的,这样从外部时无法访问该属性的,也就不能修改了,但是依然可以修改属性字典的方法来修改。

# 当然 可以使用 @proprety

class Person(object):

__name = 'Monkey'

def update_name(self, name):

self.__name = name

def get_name(self):

return self.__name

p = Person()

p.update_name('BlackMonkey')

print(p.get_name()) # BlackMonkey

print(p.__name) # 报错 AttributeError: 'Person' object has no attribute '__name'

下面在看下python中私有属性和受保护的属性的实例代码

具体代码如下所示:

class People:

def __init__(self, name, age):

self.name = name

self.age = age

self._protect_var = 10 # 受保护的成员,使用一个下划线_,它仅仅是提示成员受保护,但可以被更改

self.__private_var = 10 # 使用双下划线__可以定义私有属性

def sayhi(self):

print("Hi, my name is {}, and I'm {}".format(self.name, self.age))

def get_var(self):

print(self.__private_var)

def set_var(self, var):

self.__private_var = var

# class instance 类的实例化

someone = People(name='Jack', age=20) # 类的实例化

print(someone._protect_var) # 10 受保护的成员可以被打印

someone._protect_var = 20 # 受保护的成员可以被修改

print(someone._protect_var) # 20 可以被修改

# print(someone.__private_var) # 报错 AttributeError: 'People' object has no attribute '__private_var'

someone.__private_var = 30 # 此处可以被修改,不会报错(此处表示私有属性可以被修改,具体原因可以百度)

print(someone.__private_var) # 可以打印,不会报错

someone.get_var() # 10 此处可以发现,__private_var在上面被改成30,但此处打印出来却是10(具体原因可以百度)

someone.set_var(40)

someone.get_var() # 40 这里通过someone.set_var(40)改成了40

print(dir(someone)) # dir()打印出someone这个对象支持的属性和方法

# ['_People__private_var', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__private_var', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_protect_var', 'age', 'get_var', 'name', 'sayhi', 'set_var']

# 在类的内部重命名了 __private_var重命名成_People__private_var

someone._People__private_var = 100

someone.get_var() # 100 通过_People__private_var把__private_var的值改成了100

总结

到此这篇关于Python 私有属性和私有方法应用场景分析的文章就介绍到这了,更多相关python 私有属性和私有方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python私有方法应用场景_Python 私有属性和私有方法应用场景分析相关推荐

  1. python如何对一个属性或方法进行封装_python 类、对象、方法、属性

    在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...

  2. python下划线怎么输入_Python中下划线的使用方法有哪些

    Python中下划线的使用方法有哪些 主要介绍了Python中下划线的使用方法,是为python编程学习中的基本知识,需要的朋友可以参考下,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注 ...

  3. python中删除对象方法的区别_python中delattr删除对象方法的代码分析

    最近我们针对对象属性这块,介绍了不少关于测试属性的方法.在进行一系列测试后,我们发现这个属性并不需要,这时候就要用到删除的功能.在python中可以选择delattr函数删除对象的属性,基于它的删除功 ...

  4. python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法

    Python深拷贝和浅拷贝使用方法 发布时间:2020-06-06 16:52:01 来源:亿速云 阅读:182 这篇文章运用了实例代码展示Python深拷贝和浅拷贝使用方法,代码非常详细,可供感兴趣 ...

  5. python对共轭复数的定义_python print出共轭复数的方法详解

    复数是由一个实数和一个虚数组合构成,表示为:x+yj 一个复数时一对有序浮点数(x,y),其中x是实数部分,y是虚数部分. Python语言中有关复数的概念: 1.虚数不能单独存在,它们总是和一个值为 ...

  6. python参数默认值实例_Python中使用partial改变方法默认参数实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- #python2.7x #partial.py #authror: orangleliu ''' funct ...

  7. python内置方法怎么使用_python的常用内置方法

    __author__ = 'coco' ''' python内置函数 ''' # all() 全为真,才为真 print(all([0,-2,3])) # False print(all([1,-2, ...

  8. python类属性数据三维图_Python图表属性

    Python具有用于数据可视化的一些很不错的类库. Pandas,numpy和matplotlib的组合可以帮助创建几乎所有类型的可视化图表. 在本章中,我们将开始查看一些简单的图表和图表的各种属性. ...

  9. python画图软件是哪个_Python实现画图软件功能方法详解

    Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...

  10. python中run函数作用_Python subprocess中的run方法

    调用subprocess的推荐方法是对于它可以处理的所有使用场景都使用run()函数. run()函数是在Python 3.5中添加的,如果在老版本中使用,需要下载并扩展. 扩展安装方式: $ pip ...

最新文章

  1. 牧小熊:Adobe Illustrator 在科研作图中的应用!
  2. python 对象类型有哪些?
  3. jqMobi(App Framework)入门学习(一)
  4. html5在线api,HTML5 历史记录API
  5. 对模型方差和偏差的解释之一:过拟合
  6. GridView自动排序(原创)
  7. 软件测试用例优秀例子_功能测试用例设计方法分享
  8. 未定义标识符 stringc/c++(20)_Python 标识符命名规则
  9. 数据库表连接总结:等值连接, 自然连接,左外连接,右外连接,内连接,全外连接;
  10. Atitit.预定义变量与变量预处理器
  11. Mac-wifi密码破解 2020-04-30
  12. linux教程第六章,第六章:依赖性 - scons用户指南_Linux教程_Linux公社-Linux系统门户网站...
  13. idea项目配置jsp模板
  14. 【c语言】数字金字塔
  15. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...
  16. 892A Greed
  17. 首申百度联盟、Google Adsense,均败
  18. 面试题之数据库脏读、不可重复读、幻读
  19. git时出现! [rejected] master -> master (non-fast-forward)解决方法
  20. 计算机主板会不会被篡改,我这电脑主板烧坏后拿去修后变得好卡是不是有什么硬件被换了...

热门文章

  1. IBM林咏华:AI王牌炼成记——访IBM全球杰出工程师、人工智能系统技术总监、IBM中国研究院林咏华
  2. 南京财经大学计算机考研学费,南京财经大学学费多少
  3. 计算机病毒不可侵入,计算机病毒考试题型.doc
  4. 为华为交换机设置ntp获取时间
  5. 域控制器无法向DNS注册SRV记录解决办法
  6. ubuntu桌面特效设置
  7. 51单片机LCD1602温度时钟万年历带闹钟DS18B20实践制作DIY- GC0046-出租车计价器
  8. unity导出android,可以显示出MMD模型,但是不能播放动作。求解答
  9. 仿小米商城二维码下拉
  10. python将英文字母排序_20191106-基于Python的对字母基数排序