3

可能重复:
Python init和 self 他们做了什么?

谁能解释一下是什么__init__(self)?我一直在阅读其他问题和提到超级课程的人?什么是超级班?我认为程序应该从

def print_word(word):
    print word

__init__(self)某种特殊情况,因为它有下划线和“自我”吗?抱歉缺少具体的术语……仍在学习中。

4

5 回答 5

9

__init__(self)是在所谓的“类”中使用的特殊功能。允许您定义自己的数据类型/对象,并且__init__在您创建已定义的数据类型/对象的新实例时调用此函数。这就像说“嘿,每次你做这些事情时,确保你也运行这个代码”。在面向对象编程中,我们称这种函数为“构造函数”。这是一个用于“构造”新对象的函数。是对实际创建的self对象的引用。换句话说,从技术上讲,在您使用__init__函数时,该对象已经创建。__init__只是让您有机会初始化对象的各个方面(因此名称为__init__)。

Python 是函数式、过程式和面向对象范式的混合体。该__init__业务与对象有关。有关面向对象编程的更多信息,您可以查看wikipedia 文章

于 2012-07-26T16:35:06.530 回答
4

__init__是Python 中类的构造函数。类中用括号括起来的方法__具有特殊含义(构造、运算符实现等)。

于 2012-07-26T16:35:49.953 回答
3

要了解您的角色,__init__(self, ...)您必须先了解类。

一个类基本上定义了一种对象。例如,如果我想定义 a 的Fish行为方式,我可能会从以下形式开始

class Fish:
    def swim(self):
        print "I'm swimming!"
    def breathe(self):
        print "I'm breathing!"

然而,这不是一个非常有用的类,因为虽然我们已经定义了 a Fishcan做什么,但我们不知道如何存储关于 的其他基本特性Fish,例如它的重量。

原则上,如果我有一个Fishnamed f,我可以这样做

f.weight = 3

但是,如果我忘记为某些人这样做Fish,比如Fish命名g,然后尝试g.weight在表达式中使用,Python 将不会很高兴——它会抛出一个AttributeError抱怨Fish instance has no attribute 'weight'

为了避免这种情况,我们可以为我们的类定义一个构造函数,每次Fish创建一个新对象时,都会将其权重和颜色等属性设置为合理的默认值。在 Python 中,这个构造函数被调用__init__。只要在类中定义它,每次创建该类的新实例时都会调用它。

class Fish:
    def __init__(self):
        self.weight = 3
    def swim(self):
        print "I'm swimming!"
    def breathe(self):
        print "I'm breathing!"

您为类定义的每个函数都带有一个隐含的参数,我们通常将其标记为self. 第一个参数始终设置为调用函数的实例。例如,如果我调用

f = Fish()
f.swim()

Python 创建 a Fish,将其放入f,然后调用Fish.__init__(f)and Fish.swim(f)。在这种情况下,Fishinf将其权重设置为 3,并导致“我在游泳!” 要打印。

您可以创建不需要带self参数的类函数,称为静态函数,但这些函数仅适用于您可能暂时不会遇到的特定情况。Python 中的类函数通常是实例函数,它会self隐式接受参数。

请注意,在上面的示例中,每个 Fishcreated 都将其默认权重设置为 3。如果我们想在Fish创建时指定 a 的权重怎么办?好吧,我们可以定义__init__()一些额外的参数:

class SuperFish:
    def __init__(self, weight = 3):
        self.weight = weight

请注意,该weight参数的默认值定义为 3。因此,我们实际上可以选择指定权重。如果我们刚才说def __init__(self, weight):的是,则需要指定权重。

我们现在可以执行以下任一调用:

a = SuperFish() # creates a SuperFish with a weight of 3
b = SuperFish(42) # creates a SuperFish with a weight of 42
c = SuperFish(weight = 9001) # creates a SuperFish with a weight of 9001

希望这可以为您解决问题:)

于 2012-07-26T16:59:04.110 回答
3

可能重复:Python __init__ 和 self 他们做了什么?

def print_word(word)是一个函数(或方法/过程)。__init__(self)是在中使用的函数。

关于类的 Python 教程的这一部分__init__描述了该函数。顺便说一句,我强烈建议您阅读整个页面。

self是任意选择一个词来指代类本身;如果你愿意,你可以使用watermelon. 请参阅:自我的目的是什么?

用双下划线包裹的 Python 类函数具有特殊的含义。另一个例子是__str__。PEP8(一个重要的 Python 风格文档)的这一部分解释了 Python 中下划线的含义。


超类:

于 2012-07-26T16:39:42.653 回答
0

self 指的是对象本身,并且__init__初始化该“自我”的字段的构造函数。例如,您正在创建一个包含字段“name”和“age”的 Person 类。在__init__中,您可以通过执行以下操作将默认名称设置为“Bob”并将年龄设置为 36:

def __init__(self):
    self._name = "Bob"
    self._age = 36

这样,每次创建新的 Person 对象时,默认名称和年龄将设置为“Bob”和 36。

于 2012-07-26T16:46:20.343 回答