python中_init_的函数怎么用,python_init_方法的作用和特征

  python中_init_的函数怎么用,python_init_方法的作用和特征

  Java网站链接:Java全栈工程师示例驱动学习 how2j.cn

  1)class类包含:

  类的属性:类中涉及的变量。

  类的方法:类中的函数

  2) __init函数(方法)

  1.开头有两个下划线的函数声明该属性是私有的,不能在类外使用或直接访问。

  2.init函数(方法)支持带参数的类的初始化,也可以用来声明类的属性。

  3.init函数(方法)的第一个参数必须是self(self是个成语,也可以用其他名字),后面的参数可以自由定义,和定义函数没什么区别。(解释:self,英文单词含义明显,表示自己,本身)。这里有几个潜在的含义:

  1.这里的Self指的是实例Instance本身。

  2.同时,说到“自我”这个词,是用相对的“他者”来说的。这里的其他变量指的是类和其他变量,比如布局变量和全局变量。自我在这里是一个对象,客体。是当前类的实例。

  因此,相应的

  自我价值名称

  在函数中()

  Value:代表self对象的变量,即实例。它对应于其他类变量、全局变量和局部变量。

  函数:表示调用的是self对象,也就是实例的函数。它对应于其他全局函数。

  Python中为什么要有self?

  其实上面已经基本说清楚了为什么需要自我。

  那就是:

  在类的代码(函数)中,需要访问当前实例中的变量和函数,即访问:

  对应的变量(属性):实例。读取以前的值并写入新值。

  调用相应的函数):Instance.function(),即执行相应的动作。

  -但是你需要访问实例的变量,调用实例的函数,当然也需要对应的实例实例对象本身。

  -Python规定函数的第一个参数必须是实例对象本身,建议习惯上将其名称写成self。

  ——所以,我们需要自我(我们需要利用自我)

  如果不使用self,也就是在代码中去掉self之后,那段文字中使用的变量实际上并不是你想要的,不是真实实例中的变量和函数,而是实际访问了其他部分的变量和函数。

  甚至因为没有合适的初始化实例变量,会导致后续不可访问的错误。

  下面,通过代码,来论证,如果self被移除,或者self没有被合理使用,会出现什么错误。

  如果相应的实例变量没有在__init__中初始化,那么对实例变量的后续引用将会导致错误。

  下面的代码充分说明了如果在Class class的初始__init__函数中没有正确初始化实例变量,以后就没有变量可用了,就会出现AttributeError的错误:

  #注意:这里的全局变量名,写为name,仅用于演示。

  #其实好的编程风格应该写成gName这样的名字来表示变量是全局变量。

  name=全局名称;

  班级人员:

  def __init__(self,newPersionName):

  # self.name=newPersionName

  #1.如果这里没有写为self.name

  #那么这里的名字就是__init__函数中的局部临时变量名。

  #与全局名称无关。

  name=newPersionName

  #这里使用的局部变量名称只是为了演示代码,

  #但是,应该注意的是,这里很明显,下面的代码没有利用这里的局部变量名。

  #导致这里的name变量实际上被浪费了,根本用不到。

  def sayYourName(self):

  #在这里,因为找不到实例中的name变量,所以将报告一个错误:

  #AttributeError:人员实例没有属性“name”

  print 我的名字是% s %(self . name);

  def selfAndInitDemo():

  persion instance=Person( crifan );

  persion instance . say your name();

  ###############################################################################

  if __name__==__main__ :

  selfAndInitDemo();

  从上面的代码可以看出,由于类初始化(实例化)的__init__函数中没有设置self.name的值,所以实例中没有name变量,导致后面访问self.name时出现AttributeError错误。

  相应的,如果写成self.name,意思是正确的,就是初始化的时候给实例增加了新的值newPersionName,正常设置了正确的值,这样以后通过self.name就可以访问当前实例中正确的变量名了。

  对应的正确编写代码如下:

  #注意:这里的全局变量名,写为name,仅用于演示。

  #其实好的编程风格应该写成gName这样的名字来表示变量是全局变量。

  name=全局名称;

  班级人员:

  def __init__(self,newPersionName):

  #这里正确的是,通过访问self.name的形式,实现了:

  #1.将name变量添加到示例中。

  #2.初始值被赋给name,即newPersionName。

  self.name=newPersionName

  def sayYourName(self):

  #在这里,由于self对象已经被正确初始化,name变量被包含在其中,所以name值在这里可以被正确访问,输出也可以是正确的:

  #我的名字是克里凡

  print 我的名字是% s %(self . name);

  def selfAndInitDemo():

  persion instance=Person( crifan );

  persion instance . say your name();

  ###############################################################################

  if __name__==__main__ :

  selfAndInitDemo();

  在函数中,使用相应的变量。虽然代码可以运行,但实际使用的是它,而不是实例中的变量。

  有时候虽然你写的代码可以运行,但是你用的变量,因为self没有加,实际上用的是其他变量而不是实例变量。

  这类问题主要与Python中变量的作用域有关,但在这个例子中,也与是否使用self有关:

  #注意:这里的全局变量名,写为name,仅用于演示。

  #其实好的编程风格应该写成gName这样的名字来表示变量是全局变量。

  name=全局名称;

  班级人员:

  name=类全局名称

  def __init__(self,newPersionName):

  # self.name=newPersionName

  #这里不使用self.name。

  #所以这里的名字实际上还是局部变量名。

  #虽然在这里赋值了,但是后面没有用到,属于浪费的局部变量名。

  name=newPersionName

  def sayYourName(self):

  #在这里,它没有像以前一样出现的原因是:

  #AttributeError:人员实例没有属性“name”

  #那是因为,虽然当前实例self中的__init__中没有初始化对应的name变量,但是实例self中没有对应的name变量。

  #但是因为实例对应的类Person有对应的name变量,所以也可以正常执行代码。

  #这里对应的self.name实际上是Person.name

  print 我的名字是% s %(self . name);# -类全局名称

  Person类中的“print”名称实际上是全局名称:% s“%(name);#-全局名称

  print 仅通过Person.name=%s%(Person.name)访问人员的姓名;# -类全局名称

  def selfAndInitDemo():

  persion instance=Person( crifan );

  persion instance . say your name();

  “print”全局名称是%s%(名称);# -全局名称

  ###############################################################################

  if __name__==__main__ :

  selfAndInitDemo();

  可以看出,这里的start __init__中没有为self实例初始化对应的名称。

  在下面的函数sayYourName中,虽然可以调用到self.name,但是没有AttributeError错误。

  但实际上这里的值并不是预期的,传入的名字,即 crifan ,而是这个名字在类中的值,即 class global name 。

  Python中的__init__。

  在Python中,我们经常看到很多类中都有__init__函数。

  我们来解释一下__init__的含义。

  Python中__init__的含义

  先看init这个词本身,意思是初始化。

  而__init__,和这个词的本义一样,是用来初始化的。

  但是为了谁呢?

  很明显,就是初始化对应的类本身。

  Python中为什么有__init__?

  我的理解是__init__的出现主要有两个作用:

  常见的初始化,我理解可能有两个主要方面:

  支持用参数初始化类。

  这种用法感觉就像,在其他语言中,类初始化时,可以运行并传递不同的参数;

  用代码演示如下:

  班级人员:

  def __init__(self,newPersionName):

  #在初始化新类的示例实例时,为相应的不同实例设置不同的人名。

  self.name=newPersionName

  def sayYourName(self):

  #不同人的例子,调用同一个方法时,说出自己的名字,结果都是对应自己的,不同的名字。

  print 我的名字是% s %(self . name);#我的名字是克里凡

  def initDemo():

  persion instance=Person( crifan );

  persion instance . say your name();

  ###############################################################################

  if __name__==__main__ :

  init demo();

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: