python跨函数调用变量,python直接调用类方法
上一篇文章谈到了类的创建,并重点讨论了构造函数和类实例,尤其是self。在谈到构造函数的时候,特别提到init()是一个函数,但是它在一个类中有一点特殊的作用。每个类必须首先运行它,它指定了类的基本结构。
除了类中的这个函数之外,还可以在数据流过程中编写其他函数,继续前面的示例:
#!/usr/slim quicksand/env python # coding:utf-8 class Person:def _ _ init _ _(self,name,lang= golang ,website= www . Google . com ):self . name=name self . lang=lang self . website=website self . email= HIE Kay @ Gmail . com def Author(self):return self . name HIE Kay=Person( HIE Kay )info=Person( h ,lang=python ,website= HIE Kay . github . io )print 作者姓名from hiekay:Author () print 信息中的作者姓名:,信息。Author()# Run result Author name from HIE Kay:hiekayauthor name from info:h这段代码多了一个函数,author(self),我们暂且忽略,后面再详细分解。首先看看这段代码中的数据是如何流动的。
定义类Person,然后创建实例hiekay=person ("hiekay ")。hiekay的这个实例对应于Person类中的self。都是引用实例对象(往往简化为实例对象)。“Hiekay”是一个特定的数据,它通过构造函数中的name参数传递给实例的属性self.name。另一个方法的参数列表中的第一个,author,在类Person中是self,意思是承接self对象。返回self.name意味着其属性self.name的数据通过self对象传递给author等类。
运行hiekay.author()的时候,就是告诉上面的代码,调用hiekay实例对象,得到author()方法的结果。hiekay的这个实例是自动告知author()(注意这里不需要写self参数,这个告知过程是python自动完成的,我们不用管)。author方法返回hiekay实例的属性,因为之前已经完成了hiekay和self的对应过程,所以此时作者中的self就是hiekay,自然self.name=hiekay.name。
再做一个实验,就是在author中返回hiekay.name,看看有什么效果。既然hiekay和self是同一个实例对象,有没有可能直接写hiekay.name?
#!/usr/slim quicksand/env python # coding:utf-8 class person:def _ _ init _ _(self,name,lang= golang ,website= www . Google . com ):self . name=name self . lang=website self . email= HIE Kay @ Gmail . com def Author(self):# return . name return HIE Kay . name # returns HIE Kay=person( HIE Kay )info=person( h ,lang= python ,website= HIE Kay . github . io )print 作者姓名from但是,这个info实例的输出与hiekay实例的输出是相同的。最初,当调用info实例时,它运行到author()并返回hiekay.name。因此,一定要在这里使用self实例。调用不同实例时,self会自动匹配。当然,匹配过程是由python完成的,所以我们还是不用担心。
为什么要在类中使用方法?您可以使用def语句来编写函数,但通常这个函数看起来像这样:
ClassName: def _ _ init _ _ (self,* args):def方法(self,* args): #是类中的函数.在类名中,除了带有初始化函数的构造函数外,还有一个函数方法。这个函数和之前学过的函数一样,函数里写什么没有特别的规定。但是这个函数的第一个参数必须是self,也可以没有其他参数,但是self必须写,并且是第一个。这个self参数的作用前面已经提到了。
这样,类中的这个函数就和前面的函数有些不同了。
类中的这个函数叫做方法。
之所以用方法,是因为用类,用函数减少代码冗余,提高代码重用性,这也是OOP的原因。
如何重用方法?请看这段代码的开头。里面有一个作者方法。无论是hiekay还是info实例,这个方法都是用来返回实例导入的名称。这就是重用的体现。
就像写一个操作方法和函数的过程一样,重要的是在参数表中先写self,即使没有其他参数。
#!/usr/slim quicksand/env python # coding:utf-8 class Person:def _ _ init _ _(self,name,lang= golang ,website= www . Google . com ):self . name=name self . lang=lang self . website=website self . email= HIE Kay @ Gmail . com def Author(self,addresshiekay=Person( hiekay )info=Person( h ,lang=python ,website=hiekay.github.io ) 在author方法中加入一个参数address,调用这个方法时:hiekay.author("China "),给这个参数赋值,在类中,这个方法显示有两个参数(self,address),但是调用时第一个参数自动对应实例hiekay,没有显式赋值,可以理解为隐式完成(其实hiekay也可以看作是隐藏的subject
通过上面的故事,读者可以尝试一下这个类。提醒一下,一定要清楚班级的数据流流程。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。