我正在尝试理解 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
以上完全是编造的,所以请原谅它的毫无意义(可以说它的目的是为了说明我的问题,所以我猜它并非毫无意义)。
毫无疑问,出于某种原因,我会因为这个问题而得到大量的低分,但我一直在阅读各种书籍(Learning Python The Hard Way,Python For Beginners)并一直在在线阅读各种教程,但没有一个真正证实“您必须在 init 函数中添加每个变量”。因此,任何帮助更好地理解 __init__ 的人都将不胜感激。
请您参考如下方法:
首先:__init__() 函数的特殊之处在于它会在您创建类的新实例时被调用。除此之外,它是一个与任何其他函数一样的函数,您甚至可以根据需要手动调用它。
然后:您可以自由地使用传递给函数的参数做您想做的事。通常,传递给 __init__() 的参数存储在正在初始化的对象 (self) 中。有时,它们以其他方式使用,然后将结果存储在 self 中,例如传递主机名并使用它来创建套接字 - 然后您只存储套接字。不过,您不必对参数做任何事情,您可以像在 First() 函数中那样忽略它们,该函数接收一个被忽略的参数 name。注意这个参数name和类似的属性self.name是不同的东西!
注意事项:
- 不过,忽略传递给
__init__()的参数并不常见,就像通常忽略参数一样。在某些情况下,它们是“保留的”,因此它们可以被派生类使用,但通常它们是无意的(我猜与您的First()函数一样)。 - 查看 PEP8,这是一份风格指南。遵守它会让其他人更容易阅读你的代码。例如。
First()应该改为first()。 - 升级到 Python 3。我认为现在没有任何借口来学习 Python 2,除了维护以便在一般情况下使用它外,没有任何借口。
