前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PYTHON 中的__init__()方

PYTHON 中的__init__()方

作者头像
py3study
发布2020-01-07 10:22:26
5160
发布2020-01-07 10:22:26
举报
文章被收录于专栏:python3python3

在类定义时,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”等等就是很好的名字。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档