我试图理解Python类。我对定义__init__
感到困惑。如果我创建的4个函数都采用各种输入变量。我是否必须在__init__
?
class Thing:
def __init__(self, arguments, name, address, phone_number, other):
self.arguments = arguments
self.name = name
self.address = address
self.phone_number = phone_number
self.other = other
def First(self, name):
print self.name
def Arguments(self, arguments):
print self.arguments
def Address(self, address, phone_number):
print self.address + str(self.phone_number)
def Other(self, other):
print self.other
以上是完全弥补的,请原谅其无意义(可以说它的意思是说明我的问题所以猜测它并非毫无意义)。
毫无疑问,由于某些原因,我会为这个问题获得大量的下降标记,但我一直在阅读各种书籍(学习Python艰难的方式,Python初学者),并在线阅读各种教程,但没有一个真正确认“您必须在init函数中添加每个变量“。因此,任何帮助理解__init__
的任何帮助都会受到赞赏。
答案 0 :(得分:3)
首先:__init__()
函数的特殊之处在于,在创建类的新实例时会为您调用它。除此之外,它是一个像任何其他功能一样的功能,你甚至可以手动调用它。
然后:您可以使用传递给函数的参数自由地执行您想要的操作。通常,传递给__init__()
的参数存储在正在初始化的对象(self
)中。有时,它们以其他方式使用,然后结果存储在self
中,就像传递主机名并使用它来创建套接字一样 - 然后只存储套接字。您不必对参数执行任何操作,您可以像在First()
函数中那样忽略它们,该函数接收被忽略的参数name
。请注意,此参数name
和类似属性self.name
是不同的东西!
注意:
__init__()
的参数并不常见,就像通常忽略参数一样。在某些情况下,它们是“保留的”,因此它们可以被派生类使用,但通常它们是无意的(就像我的First()
函数一样)。First()
应为first()
。答案 1 :(得分:2)
如果变量逻辑上连接到对象本身,那么在构造函数中设置它是件好事:
class Student:
def __init__(self, name):
self.name = name
def print_name(self):
print(self.name)
如果变量只是某个函数的临时参数,那么,只需将其作为参数传递:
class Cafeteria:
def __init__(self):
pass # nothing
def process(self, student_name):
print(student_name + " got lunch")
在Python中,您不必像C ++,C#,Java等那样声明所有可能的对象属性。我认为在构造函数中将它们初始化为某些空值仍然是个好主意(None
,0
),但没有必要。这很好:
class Cafeteria:
def set_today_menu(self, menu):
self.menu = menu
def process(self, student_name):
print(student_name + " got " + self.menu)
答案 2 :(得分:0)
你不必,但是为了访问它们,他们需要设置某个地方...如果你愿意,你也可以在类中的任何defs之外设置默认值。
def Class:
RandomVariable = 5
def __init__(self, val):
self.RandomVariable = val
答案 3 :(得分:0)
此方法称为初始化程序,您可以在其中启动对象,然后向其中添加属性。如果我们要创建一个类,人类对象可能包含名称,年龄和性别属性,所有这些属性都使用初始化程序中的自指针绑定到对象。此外,初始化程序也可以修改全局变量。如果你想计算出生婴儿的数量,你可以从我们虚构的人类初始化器中添加一个全局计数器变量。