_ _ init() _ _(self[,...])

我们有时在类定义写__init()__方法,但是有时又没有。__init()__方法相当于其他面向对象的编程语言中的构造方法,也就是类在实例化成对象时首先会调用的一个方法。当我们写代码时需要进行初始化的时候,我们才去写 _ _ init() _ _方法,没有需要时我们自然不会去写入这个方法。下面我们给出一个实例,我们先定义一个类,拥有计算面积与周长两个方法,然后需要对象在初始化拥有长和宽两个参数

class Test:
def __init__(self, x, y):
self.x = x
self.y = y def getArea(self):
return self.x * self.y def grtPeri(self):
return (self.x + self.y) * 2



这里需要注意的是__init()__方法的返回值一定是none,其他就会报错。

_ _new _ _(cls[,...])

_ _ new _ _()才是一个对象实例化时调用的第一个方法,它和其他的双下划线包围的方法不同,它的第一个参数不是sel而是这个类(cls),而其他的参数会直接传递给 _ _ init() _ _ 方法的。

_ _ new _ _()方法需要返回一个实例对象,通常是cls这个实例化的对象,当然我们也可以返回给其他的对象。

_ _ new _ _()方法平时我们很少去重写它,一般让python用默认的执行方案就行了。但是还会有情况需要我们取重写这个方法,比如当继承一个不可变的类型时,它的特性就会凸显出来。

下面给出实例。

class CapStr(str):
def __new__(cls, string):
string = string.upper()
return str.__new__(cls, string)

这里返回str.new(cls, string)的优点在于哪呢,因为此时我们只需要注意我们在此处重写的部分,其他琐碎的东西可以完全交给python的默认机制就行了,交给它处理可比我们自己写出错的概率要小得多。

_ _ del _ _(self)

如果说前面说的两个方法是对象的构造器的话,那么python也提供了一个析构器,叫做 _ _ del _ _(self)方法。当对象将要被销毁的时候,这个方法就会调用。但是要注意的是,冰粉del x就相当于调用x. _ _ del _ _(), _ _ del _ _()方法是当垃圾回收机制回收这个对象时候调用的。

举个例子

class A:
def __init__(self):
print("方法1被调用") def __del__(self):
print("方法2被调用")

python中几个双下划线用法的含义的更多相关文章

  1. Python中单下划线与双下划线用法总结

    看mentor的脚本时,遇到self._item.callspec.getparam('')语句,理解起来比较困难,找到一篇文章,记录的比较详细,特别记录一下,以备复习. 附链接地址:http://w ...

  2. python中单下划线(_)和双下划线(__)的特殊用法

    单下划线开头(_) 在模块中使用单下划线开头 模块中使用单下划线(_)开头定义函数.全局变量和类不能被模块外部以: from module import *形式导入. 但可以用:from module ...

  3. python 私有和保护成员变量如何实现?—— "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量;" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  4. Python中单下划线和双下划线

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

  5. Python笔记_第三篇_面向对象_4.单下划线和双下划线

    说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...

  6. python中那些双下划线开头得函数和变量--转载

    Python中下划线---完全解读     Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __x ...

  7. python中那些双下划线开头得函数和变量

    Python中下划线---完全解读     Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __x ...

  8. python中的单下划线和双下划线意义和作用

    Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以 ...

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

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

随机推荐

  1. 深入理解Mysql——锁、事务与并发控制

    本文对锁.事务.并发控制做一个总结,看了网上很多文章,描述非常不准确.如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 每个连接都会在mysql服务端产生一个线程(内部通过线程池管理 ...

  2. React技术栈——Redux

    Redux 1.Redux是什么?   Redux对于JavaScript应用而言是一个可预测状态的容器.换言之,它是一个应用数据流框架,而不是传统的像underscore.js或者AngularJs ...

  3. Nginx SSL/HTTPS 配置

    使用OpenSSL生成证书 1.生成RSA密钥的方法 openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加 ...

  4. 面试官没想到一个Volatile,我都能跟他扯半小时

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  5. CSS页面定制代码+动漫人物设计

    右下角的小人物(我蛮喜欢的) 把下面这段代码粘贴到设置里页脚代码处 在第六行的model左右的名字可选,我这个是叫z16 然后这里有别人的一篇博客有其他名字https://blog.csdn.net/ ...

  6. Go语言接口内部布局和方法集详解

    1. 接口值内部布局   如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定义的类型的值就可以赋给这个接口类型的值.这个赋值会把用户定义的类型的值存入接口类型的值.赋值完成后得到的值称 ...

  7. xml(2)

    DTD用来验证xml的形式 引入格式:<!DOCTYPE 根元素的名字 SYSTEM "路径">//其中system代表本地路径 <?xml version=&q ...

  8. 帝国cms列表页内容简介字段smalltext去除里面html格式代码 设置方法

    帝国cms列表页内容简介字段smalltext去除里面html格式代码帝国cms列表页调用内容简介出现html代码怎么办 近来在用帝国cms的时候,发现一个问题,在列表页调用产品简介的时候出现了这种h ...

  9. 如何应对Kubernetes的安全挑战?

    导读:Kubernetes的广泛使用证明了企业的信念,即他们不仅具有处理现代应用程序开发和现代化计划的复杂性的能力,而且具有大规模处理能力. 根据CNCF对各种规模的公司中1340位技术专家的最新调查 ...

  10. Javascript模块化编程-require.js

    转自:https://www.cnblogs.com/digdeep/p/4607131.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成"互联网应用程序&quo ...