Python类__init__确认

时间:2015-03-28 13:18:58

标签: python python-2.7 init

我试图理解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__的任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:3)

首先:__init__()函数的特殊之处在于,在创建类的新实例时会为您调用它。除此之外,它是一个像任何其他功能一样的功能,你甚至可以手动调用它。

然后:您可以使用传递给函数的参数自由地执行您想要的操作。通常,传递给__init__()的参数存储在正在初始化的对象(self)中。有时,它们以其他方式使用,然后结果存储在self中,就像传递主机名并使用它来创建套接字一样 - 然后只存储套接字。您不必对参数执行任何操作,您可以像在First()函数中那样忽略它们,该函数接收被忽略的参数name。请注意,此参数name和类似属性self.name是不同的东西!

注意:

  • 虽然忽略传递给__init__()的参数并不常见,就像通常忽略参数一样。在某些情况下,它们是“保留的”,因此它们可以被派生类使用,但通常它们是无意的(就像我的First()函数一样)。
  • 查看PEP8,这是一种风格指南。坚持它将使其他人更容易阅读您的代码。例如。 First()应为first()
  • 升级到Python 3.我认为现在没有任何借口可以学​​习Python 2和除了维护以外的一般借口。

答案 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等那样声明所有可能的对象属性。我认为在构造函数中将它们初始化为某些空值仍然是个好主意(None0),但没有必要。这很好:

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)

此方法称为初始化程序,您可以在其中启动对象,然后向其中添加属性。如果我们要创建一个类,人类对象可能包含名称,年龄和性别属性,所有这些属性都使用初始化程序中的自指针绑定到对象。此外,初始化程序也可以修改全局变量。如果你想计算出生婴儿的数量,你可以从我们虚构的人类初始化器中添加一个全局计数器变量。