事实上,python封装特性的实现纯属“投机取巧”,之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称。

python在底层实现时,将它们的名称都偷偷改成了"_类名__属性(方法)名"的格式

class Person:
def setname(self, name):
if len(name) < 3:
raise ValueError('名称长度必须大于3!')
self.__name = name def getname(self):
return self.__name #为name配置setter和getter方法
name = property(getname, setname) def setage(self, age):
if age < 100:
self.__age = age
else:
raise ValueError('年龄必须小于100!') def getage(self):
return self.__age #为age配置getter和setter方法
age = property(getage, setage) #定义私有方法
def __display(self):
print(self.__name, "今年", self.__age, "岁。") xiaobai = Person()
xiaobai.name = "xiaobai"
xiaobai.age = 20
#直接调用隐藏的display()方法
xiaobai._Person__display()
xiaobai 今年 20 岁。

总结:python类中所有的属性和方法,都是公有的,如果希望python底层修改类属性或者类方法的名称,以此将它们隐藏起来,只需将它们的名称前添加双下划线("__")即可。

最新文章

  1. 第三讲. COTS包交换介绍
  2. TFS Workspace 更改电脑名称
  3. PB代码动态解析执行器
  4. 关于Unity中SteamVR_Controller.Input的错误
  5. JavaScript 的循环语句语法摘要
  6. sql事务的调用
  7. 在Java中如何实现“Pless presss any key to continue.”
  8. Cookie工具类
  9. Linux绝技
  10. AFNetworking教程
  11. Matlab GUI界面
  12. 搭建docker私有仓库 笔记
  13. Mac下Intellij IDea发布Java Web项目详解三 新建Module
  14. zepto源码研究 - zepto.js - 6(模板方法)
  15. 3223: Tyvj 1729 文艺平衡树
  16. WebApi系列~HttpClient的性能隐患
  17. odoo11 访问MSQL Server等第三发数据源
  18. 注意UTF-8-BOM 这个编码格式
  19. libunistring-0.9.9
  20. js,JQuery 生成二维码

热门文章

  1. 关于CPython中set集合的无序研究
  2. dotnet 通过 HttpClient 下载文件同时报告进度的方法
  3. HDU1556 Color the ball &amp; 牛客 contest 135-I 区间 [差分标记]
  4. Excel数据处理
  5. 【ZooKeeper系列】3.ZooKeeper源码环境搭建
  6. 网络知识_01:ISO七层模型
  7. c++ 基础知识回顾 继承 继承的本质就是数据的copy
  8. 【题解】NOIP2016 提高组 简要题解
  9. 洛谷$P$2468 粟粟的书架 $[SDOI2010]$ 主席树
  10. Spring 配置内容外部化