• __xxx__:双下划线代表着是系统定义的名字。
  • __xxx:代表着类中的私有变量名。
  • _xxx:不能用“from module import *”导入。

Python中存在一些特殊的方法,有些方法以双下划线 “__” 开头和结尾,它们是Python的魔法函数,比如__init__()和__str__等等。不用要这种方式命名自己的变量或者函数

示例代码:

class Test(object):def __init__(self, text):self.text = textdef __str__(self):return self.texttext = input("Please input text:")
obj = Test(text)
print(obj)

运行结果:

在前面加上“__”,表示它是私有成员,我们不能直接访问。比如 “__xxx” 如果要访问得通过 _class__xxx 的方式进行访问。虽然不能防止修改私有属性,但可以有效降低有意或者无意的修改

示例代码:

class Test(object):def __init__(self, text):self.__text = textself.__text2 = textdef func(self):print(self.__text)def __str__(self):return self.__texttext = input("Please input text:")
obj = Test(text)
print(obj)
obj.func()
#  print(obj.__text)  # 报错
print(obj._Test__text)
print(dir(obj))

运行效果:

从图中可以看到双下划线开头的变量,Python自动在前面加上了 “_class” 的前缀,所以我们访问时也要加上相应的前缀才能正常访问。

_xxx:一种约定,用来指定变量私有。程序员用来指定私有变量的一种方式。不能用from module import * 导入,其他方面和公有一样访问。

示例代码:

#  test.py
class Test1(object):def __init__(self):self.text = "my is text!"def __str__(self):return self.textclass _Test2(object):def __init__(self):self.text = "my is text2!"def __str__(self):return self.textif __name__ == '__main__':obj1 = Test1()obj2 = _Test2()print(obj1)print(obj2)

可以通过别的方式访问这个类,修改我们的test2.py文件为以下内容。

#  test2.py
import testobj1 = test.Test1()
print(obj1)
obj2 = test._Test2()
print(obj2)

除了不能通过 from module import * 这种方式导入外,跟公有类并没有差别。

运行效果:

__sizeof__() : 打印系统分配空间的大小。

示例代码:

class Test(object):def __init__(self):self.__text = "my is text!"def func(self):print(self.__text)def __str__(self):return self.__textobj = Test()
print(obj)
print(dir(obj))
print("*" * 100)
print(obj.func.__sizeof__())
print(obj.func.__sizeof__)
print("*" * 100)
print(obj.func().__sizeof__)
print(obj.func().__sizeof__())

运行结果:

__name__:前面和后面加上下划线代表着是系统定义的名字。普通变量不能使用此方式来命名。__name__表示当前模块执行过程中的名称,如果该模块执行,则__name__的值为"__main__",如果模块是被导入的,则__name__的值为被导入的模块的模块名字。

__main__:表示整个工程开始运行的入口。

示例代码:

#  test_name.py
def func():if __name__ == '__main__':print("my name is %s" % __name__)  # my name is __main__else:print("It's me: %s" % __name__)  # It's me: test_nameif __name__ == '__main__':func()  # my name is __main__#  在其它文件中
#  test_name2.py
import test_nametest_name.func()  # It's me: test_name

关于python所编写的代码与python底层实际调用的代码,详见:python中那些双下划线开头得函数和变量--转载 - nkwy2012 - 博客园

python双下划线用法详解相关推荐

  1. python中的super用法详解_Python中super函数用法实例分析

    本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...

  2. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  3. python classmethod_对Python中的@classmethod用法详解

    在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以 ...

  4. python lambda函数-Python的Lambda函数用法详解

    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式. 1.为什么要 ...

  5. Python BS4解析库用法详解

    Python BS4解析库用法详解 Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据.Bea ...

  6. Python格式化字符输出用法详解

    Python Print() 格式化输出用法详解 Python格式化有两种方式,一种利用%号格式输出,另一种利用Format: 建议利用Format格式,其具有较好的可扩展性 1.字符串格式化符号% ...

  7. python中setattr()函数用法详解

    setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的. getattr()用法详见博文:python中getattr()函数用法详解_IT之一小佬的博客-CSDN ...

  8. python中的符号下划线_详解Python中下划线的使用方法

    编程派微信号:codingpy 这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线 _ 的不同用法绝大部分(不全是)都是一种惯例约定. 单个下划线(_) 主要有三种情况: ...

  9. python双下划线什么意思_python中几个双下划线用法的含义

    _ _ init() _ _(self[,...]) 我们有时在类定义写__init()__方法,但是有时又没有.__init()__方法相当于其他面向对象的编程语言中的构造方法,也就是类在实例化成对 ...

最新文章

  1. js判断是否包含指定字符串
  2. 对AFTER触发器的一些整理
  3. mysql查询2020年之前_2020年成人高考成绩如何查询?2020年成考录取结果如何查询?...
  4. Building wheel for wrapt (setup.py) ... error的解决办法(图文)
  5. c++ string 长度限制_String 有多长?
  6. boost::hana::overload_linearly用法的测试程序
  7. spring boot 源码_springboot源码架构解析listener
  8. 154 万 AI 开发者用数据告诉你,中国 AI 如何才能弯道超车?| 中国 AI 应用开发者报告
  9. 英文Ubuntu系统安装中文支持,中文UTF-8
  10. Android学习小Demo(10)ToDoList的改进版之ViewPager显示多个图片
  11. 认识安全测试之SQL注入
  12. 逃出你的肖申克(五):看不见的牢笼(上)
  13. 《数据密集型应用系统设计》笔记-8-流处理
  14. 计算机填充表格,表格自动填充 这几种你也会?
  15. C语言 商业贷款计算器 等额本金 等额本息
  16. 技术书籍也香艳——《Head Fisrt 设计模式》
  17. 华为OJ(素数伴侣)
  18. PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
  19. Java位运算,常见的位运算
  20. 代码质量管理工具SonarQube详解

热门文章

  1. 腾讯千帆战略升级,推出企业应用连接器
  2. 用算法改造过的植物肉,有兴趣试试么?
  3. 程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部
  4. 百度盯上媒体生意?百度CTO王海峰详解智能媒体中台
  5. 牛!Python 也能实现图像姿态识别溺水行为了!
  6. 基于人脸关键点修复人脸,腾讯等提出优于SOTA的LaFIn生成网络
  7. 无需成对示例、无监督训练,CycleGAN生成图像简直不要太简单
  8. 色情低俗、暴力恐怖内容...如何用AI“一网打尽”?
  9. 科大讯飞“AI同传”造假背后的两个关键问题
  10. 重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉