谁能解释一下是什么__init__(self)
?我一直在阅读其他问题和提到超级课程的人?什么是超级班?我认为程序应该从
def print_word(word):
print word
是__init__(self)
某种特殊情况,因为它有下划线和“自我”吗?抱歉缺少具体的术语……仍在学习中。
谁能解释一下是什么__init__(self)
?我一直在阅读其他问题和提到超级课程的人?什么是超级班?我认为程序应该从
def print_word(word):
print word
是__init__(self)
某种特殊情况,因为它有下划线和“自我”吗?抱歉缺少具体的术语……仍在学习中。
__init__(self)
是在所谓的“类”中使用的特殊功能。类允许您定义自己的数据类型/对象,并且__init__
在您创建已定义的数据类型/对象的新实例时调用此函数。这就像说“嘿,每次你做这些事情时,确保你也运行这个代码”。在面向对象编程中,我们称这种函数为“构造函数”。这是一个用于“构造”新对象的函数。是对实际创建的self
对象的引用。换句话说,从技术上讲,在您使用__init__
函数时,该对象已经创建。__init__
只是让您有机会初始化对象的各个方面(因此名称为__init__
)。
Python 是函数式、过程式和面向对象范式的混合体。该__init__
业务与对象有关。有关面向对象编程的更多信息,您可以查看wikipedia 文章。
__init__
是Python 中类的构造函数。类中用括号括起来的方法__
具有特殊含义(构造、运算符实现等)。
要了解您的角色,__init__(self, ...)
您必须先了解类。
一个类基本上定义了一种对象。例如,如果我想定义 a 的Fish
行为方式,我可能会从以下形式开始
class Fish:
def swim(self):
print "I'm swimming!"
def breathe(self):
print "I'm breathing!"
然而,这不是一个非常有用的类,因为虽然我们已经定义了 a Fish
can做什么,但我们不知道如何存储关于 的其他基本特性Fish
,例如它的重量。
原则上,如果我有一个Fish
named 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)
。在这种情况下,Fish
inf
将其权重设置为 3,并导致“我在游泳!” 要打印。
您可以创建不需要带self
参数的类函数,称为静态函数,但这些函数仅适用于您可能暂时不会遇到的特定情况。Python 中的类函数通常是实例函数,它会self
隐式接受参数。
请注意,在上面的示例中,每个 Fish
created 都将其默认权重设置为 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
希望这可以为您解决问题:)
可能重复:Python __init__ 和 self 他们做了什么?
def print_word(word)
是一个函数(或方法/过程)。__init__(self)
是在类中使用的函数。
关于类的 Python 教程的这一部分__init__
描述了该函数。顺便说一句,我强烈建议您阅读整个页面。
self
是任意选择一个词来指代类本身;如果你愿意,你可以使用watermelon
. 请参阅:自我的目的是什么?
用双下划线包裹的 Python 类函数具有特殊的含义。另一个例子是__str__
。PEP8(一个重要的 Python 风格文档)的这一部分解释了 Python 中下划线的含义。
超类:
self 指的是对象本身,并且__init__
是初始化该“自我”的字段的构造函数。例如,您正在创建一个包含字段“name”和“age”的 Person 类。在__init__
中,您可以通过执行以下操作将默认名称设置为“Bob”并将年龄设置为 36:
def __init__(self):
self._name = "Bob"
self._age = 36
这样,每次创建新的 Person 对象时,默认名称和年龄将设置为“Bob”和 36。