Python类初始化确认

Python类初始化确认,python,python-2.7,init,Python,Python 2.7,Init,我试图理解Python类。我对定义\uuuu init\uuuu有点困惑。如果我创建了4个函数,所有函数都使用各种输入变量。我必须在\uuuu init\uuuu中分配每个变量吗 class Thing: def __init__(self, arguments, name, address, phone_number, other): self.arguments = arguments self.name = name sel

我试图理解Python类。我对定义
\uuuu init\uuuu
有点困惑。如果我创建了4个函数,所有函数都使用各种输入变量。我必须在
\uuuu init\uuuu
中分配每个变量吗

 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函数中添加每个变量”。因此,如果您能帮助您更好地理解
\uuuu init\uuuu
,我们将不胜感激。

您不必这样做,但要访问它们,它们需要在某个地方进行设置……如果您愿意,还可以在类中的任何def之外设置默认值

def Class:
    RandomVariable = 5
    def __init__(self, val):
        self.RandomVariable = val

您不必这样做,但要访问它们,它们需要在某个地方设置……如果需要,您还可以在类中的任何def之外设置默认值

def Class:
    RandomVariable = 5
    def __init__(self, val):
        self.RandomVariable = val

首先:
\uuuu init\uuuu()
函数的特殊之处在于,它是在创建类的新实例时为您调用的。除此之外,它是一个类似于任何其他函数的函数,如果需要,您甚至可以手动调用它

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

注:

  • 但是,忽略传递给
    \uuuu init\uuuu()
    的参数是不常见的,就像一般忽略参数一样。在某些情况下,它们是“保留”的,因此可以由派生类使用,但通常它们是非预期的(我想,与您的
    First()
    函数一样)
  • 查看PEP8,它是一个样式指南。遵守它将使其他人更容易阅读您的代码。例如,
    First()
    应改为
    First()
  • 升级到Python 3。我不认为现在有任何借口来学习Python 2和littley,除了一般使用它的维护

首先:
\uuu init\uuu()
函数的特殊之处在于,在创建类的新实例时会为您调用它。除此之外,它是一个类似于任何其他函数的函数,如果需要,您甚至可以手动调用它

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

注:

  • 但是,忽略传递给
    \uuuu init\uuuu()
    的参数是不常见的,就像一般忽略参数一样。在某些情况下,它们是“保留”的,因此可以由派生类使用,但通常它们是非预期的(我想,与您的
    First()
    函数一样)
  • 查看PEP8,它是一个样式指南。遵守它将使其他人更容易阅读您的代码。例如,
    First()
    应改为
    First()
  • 升级到Python 3。我不认为现在有任何借口来学习Python 2和littley,除了一般使用它的维护

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

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

如果变量在逻辑上连接到对象本身,最好在构造函数中设置它:

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等。我认为在构造函数中将它们初始化为一些空值(<代码>没有<代码>,<代码> 0代码>代码)仍然是好主意,但这不是必要的。这很好:

class Cafeteria:

    def set_today_menu(self, menu):
        self.menu = menu

    def process(self, student_name):
        print(student_name + " got " + self.menu)

如果变量在逻辑上连接到对象本身,最好在构造函数中设置它:

class Student:

    def __init__(self, name):
        self.name = name

    def print_name(self):
        print(self.name)
如果变量只是某个函数的一个临时参数,那么只需将其作为参数传递即可