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

Python的__init__和self是做什么的?

方博学
2023-03-14
问题内容

我正在学习Python编程语言,遇到了一些我不太了解的东西。

用类似的方法:

def method(self, blah):
    def __init__(?):
        ....
    ....

怎么self办?这是什么意思?它是强制性的吗?

__init__方法有什么作用?为什么有必要?(等等。)

我认为它们可能是OOP构造,但我不太了解。


问题答案:

你是对的,这些是oop结构。

__init__是一个类的构造函数。该self参数引用对象的实例(如thisC ++)。

class Point:
    def __init__(self, x, y):
        self._x = x
        self._y = y

__init__分配对象的内存时将调用该方法:

x = Point(1,2)

self如果要将值与对象持久化,那么在对象的方法内使用参数很重要。例如,如果你实现如下__init__方法:

class Point:
    def __init__(self, x, y):
        _x = x
        _y = y

你的x和y参数将存储在堆栈中的变量中,并且当init方法超出范围时将被丢弃。将这些变量设置为self._x并将self._y这些变量设置为Point对象的成员(在对象的生存期内可访问)。



 类似资料:
  • 问题内容: Python源目录中的init.py用于什么? 问题答案: 它曾经是软件包的必需部分(旧的3.3之前的“常规软件包”,而不是较新的3.3+“命名空间软件包”)。 这是文档。 Python定义了两种类型的程序包,常规程序包和名称空间程序包。常规软件包是Python 3.2及更早版本中存在的传统软件包。常规软件包通常实现为包含文件的目录。导入常规程序包时,将隐式执行此文件,并将其定义的对象

  • 问题内容: 在对另一个问题的答案发表评论时,有人说他们不确定自己在做什么。所以,我问这个问题,以便在上有它的记录,以备将来参考:到底是做什么的? 问题答案: 使用装饰器时,你将一个功能替换为另一个。换句话说,如果你有一个装饰器 然后当你说 并且你的函数f将替换为。不幸的是,这意味着如果你然后说 它会打印出来,因为那是新功能的名称。实际上,如果你查看的文档字符串f,则将为空,因为没有文档字符串,因此

  • 问题内容: Python中self这个词的目的是什么?我知道它是指从该类创建的特定对象,但是我看不到为什么需要将它作为参数显式添加到每个函数中。为了说明这一点,在中,我可以这样做: 我很容易理解。但是在Python中,我需要包括: 问题答案: 让我们看一个简单的向量类: 我们希望有一种计算长度的方法。如果我们想在类中定义它,它将是什么样? 当我们将其定义为全局方法/函数时,它应该是什么样? 因此,

  • 问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变

  • 问题内容: 我对中的功能有些困惑。例如,为什么下面的试验(一致地)执行它们的工作? 我找不到关于此的好的文档。 问题答案: 伪随机数生成器通过对值执行某些运算来工作。通常,此值是生成器生成的先前编号。但是,第一次使用生成器时,没有先前的值。 播种伪随机数生成器会为其提供第一个“上一个”值。每个种子值将对应于给定随机数生成器的一系列生成值。也就是说,如果两次提供相同的种子,则两次获得相同的数字序列。

  • 问题内容: 为什么我不能执行以下操作: 我希望它能打印出来,因为我们用它覆盖了实例,但是它根本不做任何事情。甚至不会抛出错误。只是忽略分配。 我了解几乎没有任何人愿意这样做,但是您似乎做不到,这仍然很奇怪。 更新: 我现在知道 为什么 它不起作用,但是我仍然想知道是否有任何方法可以从实例中替换实例。 问题答案: 任何 简单的分配给 任何 的参数 任何 函数的行为确实是在Python以同样的方式:结