返回介绍

方法

发布于 2024-01-29 22:24:15 字数 1785 浏览 0 评论 0 收藏 0

因为你已经了解了函数,那么你就了解了类中的方法。方法位于class语句的主体内,是由def语句建立的函数对象。从抽象的视角来看,方法替实例对象提供了要继承的行为。从程序设计的角度来看,方法的工作方式与简单函数完全一致,只是有个重要差异:方法的第一个参数总是接收方法调用的隐性主体,也就是实例对象。

换句话说,Python会自动把实例方法的调用对应到类方法函数,如下所示。方法调用需通过实例,就像这样:

这会自动翻译成以下形式的类方法函数调用:

class通过Python继承搜索流程找出方法名称所在之处。事实上,两种调用形式在Python中都有效。

除了方法属性名称是正常的继承外,第一个参数就是方法调用背后唯一的神奇之处。在类方法中,按惯例第一个参数通常都称为self(严格地说,只有其位置重要,而不是它的名称)。这个参数给方法提供了一个钩子,从而返回调用的主体,也就是实例对象:因为类可以产生许多实例对象,所以需要这个参数来管理每个实例彼此各不相同的数据。

C++程序员会发现,Python的self参数与C++的this指针很相似。不过,在Python中,self一定要在程序代码中明确地写出:方法一定要通过self来取出或修改由当前方法调用或正在处理的实例的属性。这种让self明确化的本质是有意设计的:这个变量名存在,会让你明确脚本中使用的是实例属性名称,而不是本地作用域或全局作用域中的变量名。

例子

为了让这些概念更清晰,我们举个例子来说明。假设我们定义了下面的类。

变量名printer引用了一个函数对象。因为这是在class语句的作用域中赋值的,就会变成类对象的属性,被由这个类创建的每个实例所继承。通常,因为像printer这类方法都是设计成处理实例的,所以我们得通过实例予以调用。

当通过对实例进行点号运算调用它时,printer会先通过继承将其定位,然后它的self参数会自动赋值为实例对象(x)。text参数会获得在调用时传入的字符串('instance call')。注意:因为Python会自动传递第一个参数给self,实际上只需传递一个参数。在printer中,变量名self是用于读取或设置每个实例的数据的,因为self引用的是当前正在处理的实例。

方法能通过实例或类本身两种方法其中的任意一种进行调用。例如,我们可以通过类的名称调用printer,只要明确地传递了一个实例给self参数。

通过实例和类的调用具有相同的效果,只要在类形式中传递了相同的实例对象。实际上,在默认的情况下,如果尝试不带任何实例调用的方法时,就会得出错信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文