python之父的名字-Python 常见双下划线关键字的用法
1.__init__
__init__ 方法通常用在初始化一个类实例的时候,例如:
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
2.__str__
__str__用来返回对象的字符串表达式。例如:
class Person(object):
def __init__(self, name):
super(Person, self).__init__()
self.name = name
def __str__(self):
return"Hola,%s" % self.name
lina = Person("Lina")
print(lina)
在我们编写一个新的Python类的时候,总是在最开始位置写一个初始化方法__init__,以便初始化对象,然后会写一个__str__方法,方面我们调试程序。
3.__new__
__new__方法的调用是发生在__init__之前的
class Person(object):
def __new__(cls,*args, **kwargs):
print("new called")
return object.__new__(cls)
def __init__(self, name):
print("init called")
super(Person, self).__init__()
self.name = name
def __str__(self):
return"Hola,%s" % self.name
lina = Person("Lina")
print(lina)
__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
__init__ 和 __new__ 最主要的区别在于:
1.__init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2.__new__ 通常用于控制生成一个新实例的过程。它是类级别的方法。
__new__ 的作用
依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。
4.__name__和__main__
为了区分 主执行代码和被调用文件,python引入了变量:__name__。__name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“__mian__:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“__mian__:”后面的内容。
5.__slots__
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。比如,只允许对Student实例添加name和age属性:
class Student(object):
__slots__ = ("name", "age") # 用tuple定义允许绑定的属性名称
python之父的名字-Python 常见双下划线关键字的用法相关推荐
- python中单下划线_foo与双下划线_Python中单下划线和双下划线
什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法. 对于我来 ...
- 双继承_在Python中使用双下划线防止类属性被覆盖!
在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info:def __init__(self):passdef cal ...
- python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理
一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...
- [Python3] Python中单下划线和双下划线的含义
本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类. 单下划 ...
- Python中的下划线、双下划线
单下划线和双下划线在Python变量名和方法名中都有各自的含义.有些仅仅是作为约定,用于提示开发人员:而另一些则对Python解释器有特殊含义. 总的来说有一下几种情况: 前置单下划线:_var 后置 ...
- python双划线_python 单下划线与双下划线的区别
原标题:python 单下划线与双下划线的区别 python中下环线共有5中 下面开始一一介绍 1.单前导下划线 _xxx: 变量前面使用单下划线,用于指定该名称为"私有".为方便 ...
- python类的属性前加上双下划线_在Python中使用双下划线防止类属性被覆盖
在使用Python编写面向对象的代码时,咱们会经常使用"继承"这种开发方式.例以下面这一段代码:python class Info: def __init__(self): pas ...
- pytohn 单下划线与双下划线的区别
近日有同事忽然问我 关于python中私有变量的事 结果一扯呢 就扯到单双下划线了,我明明知道 但是在给他说的时候 忽然一下有点模糊了 搞得我怀疑自己智商在退步 于是乎 兴起 再来整理一番 ...
- python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
最新文章
- Cocos 全局变量的使用
- 使用Eclipse本地运行SAP UI5时, UI5库文件的js文件是从本地哪里加载的
- Eclipse如何提高开发效率
- Linux 命令之 xz -- POSIX 平台的具有高压缩率的压缩工具
- 每一个问题都是一把锁
- pointnet分割自己的点云数据_细嚼慢咽读论文:PointNet论文及代码详细解析
- Android视频开发基础(二)
- 第 20 次 CSP认证 202009-5 密信与计数
- centos6.5 安装mono
- 【matlab】三维曲面(矩形网格---meshgrid)
- 2017-06-30
- MATLAB常见语法错误
- 飞控计算机功能硬件设计,基于微机的某型无人机飞控系统的硬件设计及软件实现...
- mysql router 介绍_MySQL Router 介绍篇
- 空间大数据是什么,与云计算和大数据之间有什么关系?
- CoolWeather地区无法加载
- 快手抖音视频号涨粉方法技巧
- 如是言,一个关于格言的故事
- 学相伴飞哥RabbitMQ笔记
- 【软件安装-UBUNTU】【OLD】手把手教你在Linux上运行IE浏览器
热门文章
- 计算机音乐夜里,电脑自动播放音乐提醒你起床,晚上自动关机!
- android 字体加粗有阴影,Android TextView高级显示技巧实例小结
- 计算机组成原理所需芯片数,计算机组成原理-微电子学院微电子试验教学中心.PPT...
- 东莞城院c语言上机报告,浙大城市学院c语言上机试题
- php语言开始和结束分别为,0055 PHP语言简介和HelloWorld
- vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法
- linux arm桌面程序,Electron 从零创建一个 Windows/OS X/Linux 的桌面可执行程序
- Java虚拟机的什么周期
- 如何利用计算机多核,如何利用多核电脑实现Matlab的并行运算
- Http\Https\Socket