当前位置: 首页 > 面试题库 >

为什么需要在Python方法中显式包含“ self”自变量?

甄德寿
2023-03-14
问题内容

在Python中的类上定义方法时,它看起来像这样:

class MyClass(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

但是在某些其他语言(例如C#)中,你可以使用“ this”关键字来引用该方法所绑定的对象,而无需在方法原型中将其声明为参数。

这是Python中的一种故意的语言设计决策,还是有一些实现细节需要传递“ self”作为参数?


问题答案:

我喜欢引用Peters的Python Zen。“显式比隐式好。”

在Java和C ++中,this.可以推断出’ ‘,除非你拥有无法推断的变量名。因此,你有时需要它,有时则不需要。

Python选择使这种事情变得明确,而不是基于规则。

另外,由于没有暗示或假设,因此公开了部分实现。 self.__class__self.__dict__以及其他“内部”结构也很明显。



 类似资料:
  • 问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是

  • 问题内容: 我注意到在Swift 2.2中,标为non-escaped的闭包不需要explicit 。在Swift 3中,默认情况下,所有闭包都是不转义的,如果您希望它们能够转义,现在要求将其标记出来。 鉴于默认情况下Swift 3中的所有闭包都是非转义的,为什么它们需要显式的? 问题答案: 在Swift 3中,默认情况下所有闭包都不转义 不,在Swift 3中,默认情况下仅闭包 函数参数 (即,

  • 问题内容: 我正在学习Python,对于这个类的方法中的访问类变量,我有一个比理论更实际的问题。 例如,我们有: 为什么一定要准确地写,而不仅仅是写?属于类的名称空间,使用它的方法也属于该名称空间。我想念什么?这种风格背后的原理是什么? 在C ++中,您可以编写: 它将起作用! 问题答案: 摘自Python历史:添加对用户定义类的支持: 相反,我决定放弃隐式引用实例变量的想法。诸如C ++之类的语

  • 问题内容: 我从节点启动这是来自node.js README.md 先决条件(仅Unix): 想知道为什么node.js需要Python?它是否在其API下使用Python 问题答案: Node.js使用GYP构建-GYP —用Python编写的跨平台构建工具。Python中还实现了其他一些构建步骤。因此,从源代码构建节点需要Python。 但是您还需要Python来构建本机插件。

  • 问题内容: 我已经阅读了《使用效果的完全指南-过度反应应对潮流》。 该示例表明,如果我们想获取最新的,我们可以使用保存可变变量,并在异步函数laster中获取它: 但是,我可以通过在组件函数外部创建一个变量来执行相同的操作,例如: 两种方法都可行,或者如果我在函数组件外部定义变量,有什么不好的方法吗? 问题答案: 将为 每个 组件分配一个引用,而在函数组件外部定义的变量将仅被调用一次。 此外,尝试

  • 问题内容: 在此代码段中,我可以从bar函数内部打印counter的值 但是,当我尝试从bar函数内部递增计数器时,出现UnboundLocalError错误。 带有增量语句的代码段。 在Python闭包中,您仅对外部函数中的变量具有读取权限吗? 问题答案: 您无法在Python 2中对闭包变量进行突变。在Python 3中,由于您使用了它,您可以声明它们: 否则,内部的赋值将使变量成为本地变量,