专栏首页python3PYTHON 中的__init__()方

PYTHON 中的__init__()方

在类定义时,self和__init__会时常用到。 self 参数,它在所有的方法声明中都存在。它代表实例对象本身,当你用实例调用方法时,由解释器悄悄地传递给方法的,所以,你不需要自己传递self 进来,因为它是自动传入的。

  1. class Sample(object):
  2. def __init__(self, a,b):
  3.     self.a = a
  4.     self.b = b
  5. def updtFunc(self, a):
  6.      self.a = a
  7.      return self.a, self.b
  8. item = Sample(10,3)
  9. print item.addFunc(4)

out put: (3,4)

self 变量用于在类实例方法中引用方法所绑定的实例。

因为方法的实例在任何方法调用中总是

作为第一个参数传递的,self 被选中用来代表实例。你必须在方法声明中放上self(你可能已经注

意到了这点),但可以在方法中不使用实例(self)。

如果你的方法中没有用到self , 那么请考虑创建 一个常规函数,除非你有特别的原因。

毕竟,你的方法代码没有使用实例,没有与类关联其功能,

这使得它看起来更像一个常规函数。在其它面向对象语言中,self 可能被称为 this。

__init__:

在Python 中,__init__()实际上不是一个构造器。你没有调用“new”来创建一个新对象。(Python 根本就没有“new”关键字)。取而代之,Python 创建实例后,在实例化过程中,调用__init__()方法,当一个类被实例化时,就可以定义额外的行为,比如,设定初始值或者运行一些初步诊断代码 ———主要是在实例被创建后,实例化调用返回这个实例之前,去执行某些特定的任务或设置。

__init__()在实例化时被调用,即,在Sample()被调用时。你可以认为实例化是对__init__()的一种隐式的调用,因为传给Sample()的参数完全与__init__()接收到的参数是一样的(除了self,它是自动传递的)。

另外,如果不存在默认的参数,那么传给__init__()的两个参数在实例化时是必须的。

当def __init__(self, a = 0, b = 0)时, 我们可以只用item = Sample()来生成实例。

当类被调用,实例化的第一步是创建实例对象。一旦对象创建了,Python 检查是否实现了

__init__()方法。默认情况下,如果没有定义(或覆盖)特殊方法__init__(),对实例不会施加任

何特别的操作.任何所需的特定操作,都需要程序员实现__init__(),覆盖它的默认行为。如果

__init__()没有实现,则返回它的对象,实例化过程完毕。

然而,如果__init__()已经被实现,那么它将被调用,实例对象作为第一个参数(self)被传递

进去,像标准方法调用一样。调用类时,传进的任何参数都交给了__init__()。实际中,你可以想

像成这样:把创建实例的调用当成是对构造器的调用。

class EmplAddrBookEntry(AddrBookEntry):

'Employee Address Book Entry class'#员工地址本类

def __init__(self, nm, ph, id, em):

AddrBookEntry.__init__(self, nm, ph)

self.empid = id

self.email = em

如 果需要,每个子类最好定义它自己的构造器,不然,基类的构造器会被调用。然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了--这样,基类 的构造器就必须显式写出才会被执行,像我们上面那样,用AddrBookEntry.__init__()设置名字和电话号码。我们的子类在构造器后面几 行还设置了另外两个实例属性:员工ID 和E-mail 地址。

核心笔记:命名类、属性和方法

类名通常由大写字母打头。这是标准惯例,可以帮助你识别类,特别是在实例化过程中(有时看

起来像函数调用)。还有,数据属性(译者注:变量或常量)听起来应当是数据值的名字,方法名应

当指出对应对象或值的行为。另一种表达方式是:数据值应该使用名词作为名字,方法使用谓词(动

词加对象)。数据项是操作的对象、方法应当表明程序员想要在对象进行什么操作。在上面我们定义

的类中,遵循了这样的方针,数据值像“name”,“phone”和“email”,行为如“updatePhone”,

“updateEmail”。这就是常说的“混合记法(mixedCase)”或“骆驼记法(camelCase)”。Python 规

范推荐使用骆驼记法的下划线方式,比如,“update_phone”,“update_email”。类也要细致命名,

像“AddrBookEntry”,“RepairShop”等等就是很好的名字。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),类是抽象的模板,实例是根据类创建出来的一个个具体的“对象” 每个对象都拥有相同的方法,但...

    py3study
  • 课时41:魔法方法:构造和析构

    之前我们讨论过 _ _init_ _()方法,说它相当于其它面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。

    py3study
  • 【Python】类的初试

    测试虽然一直在定义并使用一些简单的类及方法,但对类的基础性的一些方法都不知晓,对问题一知半解,感觉不是好的方式。今天抽空看一些基础内容,做一些笔记吧,from ...

    py3study
  • 课时41:魔法方法:构造和析构

    之前我们讨论过 _ _init_ _()方法,说它相当于其它面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。

    py3study
  • Dubbo一致性哈希负载均衡的源码和Bug,了解一下?

    本文是对于Dubbo负载均衡策略之一的一致性哈希负载均衡的详细分析。对源码逐行解读、根据实际运行结果,配以丰富的图片,可能是东半球讲一致性哈希算法在Dubbo中...

    why技术
  • Backtrader量化平台教程(四)SSA策略实际案例

    AD:(本人录制的backtrader视频课程,大家多多支持哦~ https://edu.csdn.net/course/detail/9040)       

    钱塘小甲子
  • iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案

    陈满iOS
  • Hexo 为Next主题添加评论功能

    之前使用的来必力,最近评论功能一直出不来,用户体验比较差,所以重新评估选择了Valine。

    smartsi
  • UINavigationBar的用法

    UINavigationBar是一个我们在开发中必定会碰到的控件,用好它能帮助我们自定义导航栏的样式,所以今天讲解一下UINavigationBar的用法。

    Originalee
  • 【代码审计】MIPCMS 远程写入配置文件Getshell

    MIPCMS - 基于百度MIP移动加速器SEO优化后的网站系统。在审计代码中,发现一个可以远程写入配置文件Getshell的漏洞,感觉挺有意思的,分享...

    Bypass

扫码关注云+社区

领取腾讯云代金券