设为首页 收藏本站
查看: 551|回复: 0

[经验分享] PYTHON 中的__init__()方法解读

[复制链接]
发表于 2018-8-4 08:13:19 | 显示全部楼层 |阅读模式
  在类定义时,self和__init__会时常用到。
  self 参数,它在所有的方法声明中都存在。它代表实例对象本身,当你用实例调用方法时,由解释器悄悄地传递给方法的,所以,你不需要自己传递self 进来,因为它是自动传入的。

  • class Sample(object):
  • def __init__(self, a,b):
  •     self.a = a
  •     self.b = b

  • def updtFunc(self, a):
  •              self.a = a
  •              return self.a, self.b

  • item = Sample(10,3)
  • 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>
  def __init__(self, nm, ph,>  AddrBookEntry.__init__(self, nm, ph)

  self.empid =>  self.email = em
  如 果需要,每个子类最好定义它自己的构造器,不然,基类的构造器会被调用。然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了--这样,基类 的构造器就必须显式写出才会被执行,像我们上面那样,用AddrBookEntry.__init__()设置名字和电话号码。我们的子类在构造器后面几 行还设置了另外两个实例属性:员工ID 和E-mail 地址。
  核心笔记:命名类、属性和方法
  类名通常由大写字母打头。这是标准惯例,可以帮助你识别类,特别是在实例化过程中(有时看
  起来像函数调用)。还有,数据属性(译者注:变量或常量)听起来应当是数据值的名字,方法名应
  当指出对应对象或值的行为。另一种表达方式是:数据值应该使用名词作为名字,方法使用谓词(动
  词加对象)。数据项是操作的对象、方法应当表明程序员想要在对象进行什么操作。在上面我们定义
  的类中,遵循了这样的方针,数据值像“name”,“phone”和“email”,行为如“updatePhone”,
  “updateEmail”。这就是常说的“混合记法(mixedCase)”或“骆驼记法(camelCase)”。Python 规
  范推荐使用骆驼记法的下划线方式,比如,“update_phone”,“update_email”。类也要细致命名,
  像“AddrBookEntry”,“RepairShop”等等就是很好的名字。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-546191-1-1.html 上篇帖子: c c++ python java对比 下篇帖子: Python33 paramiko模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表