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 常见双下划线关键字的用法相关推荐

  1. python中单下划线_foo与双下划线_Python中单下划线和双下划线

    什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法. 对于我来 ...

  2. 双继承_在Python中使用双下划线防止类属性被覆盖!

    在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info:def __init__(self):passdef cal ...

  3. python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理

    一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...

  4. [Python3] Python中单下划线和双下划线的含义

    本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类. 单下划 ...

  5. Python中的下划线、双下划线

    单下划线和双下划线在Python变量名和方法名中都有各自的含义.有些仅仅是作为约定,用于提示开发人员:而另一些则对Python解释器有特殊含义. 总的来说有一下几种情况: 前置单下划线:_var 后置 ...

  6. python双划线_python 单下划线与双下划线的区别

    原标题:python 单下划线与双下划线的区别 python中下环线共有5中 下面开始一一介绍 1.单前导下划线 _xxx: 变量前面使用单下划线,用于指定该名称为"私有".为方便 ...

  7. python类的属性前加上双下划线_在Python中使用双下划线防止类属性被覆盖

    在使用Python编写面向对象的代码时,咱们会经常使用"继承"这种开发方式.例以下面这一段代码:python class Info: def __init__(self): pas ...

  8. pytohn 单下划线与双下划线的区别

    近日有同事忽然问我 关于python中私有变量的事 结果一扯呢 就扯到单双下划线了,我明明知道  但是在给他说的时候 忽然一下有点模糊了 搞得我怀疑自己智商在退步  于是乎 兴起 再来整理一番     ...

  9. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

最新文章

  1. Cocos 全局变量的使用
  2. 使用Eclipse本地运行SAP UI5时, UI5库文件的js文件是从本地哪里加载的
  3. Eclipse如何提高开发效率
  4. Linux 命令之 xz -- POSIX 平台的具有高压缩率的压缩工具
  5. 每一个问题都是一把锁
  6. pointnet分割自己的点云数据_细嚼慢咽读论文:PointNet论文及代码详细解析
  7. Android视频开发基础(二)
  8. 第 20 次 CSP认证 202009-5 密信与计数
  9. centos6.5 安装mono
  10. 【matlab】三维曲面(矩形网格---meshgrid)
  11. 2017-06-30
  12. MATLAB常见语法错误
  13. 飞控计算机功能硬件设计,基于微机的某型无人机飞控系统的硬件设计及软件实现...
  14. mysql router 介绍_MySQL Router 介绍篇
  15. 空间大数据是什么,与云计算和大数据之间有什么关系?
  16. CoolWeather地区无法加载
  17. 快手抖音视频号涨粉方法技巧
  18. 如是言,一个关于格言的故事
  19. 学相伴飞哥RabbitMQ笔记
  20. 【软件安装-UBUNTU】【OLD】手把手教你在Linux上运行IE浏览器

热门文章

  1. 计算机音乐夜里,电脑自动播放音乐提醒你起床,晚上自动关机!
  2. android 字体加粗有阴影,Android TextView高级显示技巧实例小结
  3. 计算机组成原理所需芯片数,计算机组成原理-微电子学院微电子试验教学中心.PPT...
  4. 东莞城院c语言上机报告,浙大城市学院c语言上机试题
  5. php语言开始和结束分别为,0055 PHP语言简介和HelloWorld
  6. vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法
  7. linux arm桌面程序,Electron 从零创建一个 Windows/OS X/Linux 的桌面可执行程序
  8. Java虚拟机的什么周期
  9. 如何利用计算机多核,如何利用多核电脑实现Matlab的并行运算
  10. Http\Https\Socket