是否有必要在Python的类中每次都包含__init__作为第一个函数?

时间:2011-07-28 04:27:02

标签: python

在Python中,我想知道在创建类时是否有必要包含__init__作为第一种方法,如下例所示:

class ExampleClass: 

    def __init__(self, some_message): 
        self.message = some_message 
        print "New Class instance created, with message:" 
        print self.message 

另外,为什么我们使用self来调用方法? 有人可以详细解释“自我”的使用吗?

另外,为什么我们在Python中使用pass语句?

9 个答案:

答案 0 :(得分:56)

不,没有必要。

例如。

class A(object):
    def f():
        print 'foo'

你当然可以这样使用它:

a = A()
a.f()

实际上你甚至可以用这种方式定义一个类。

class A:
    pass

但是,定义__init__是一种常见做法,因为类的实例通常存储某种状态信息或数据,而类的方法提供了一种操作或对该状态信息或数据执行某些操作的方法。 __init__允许我们在创建类的实例时初始化此状态信息或数据。

这是一个完整的例子。

class BankAccount(object):
    def __init__(self, deposit):
        self.amount = deposit

    def withdraw(self, amount):
        self.amount -= amount

    def deposit(self, amount):
        self.amount += amount

    def balance(self):
        return self.amount

# Let me create an instance of 'BankAccount' class with the initial
# balance as $2000.
myAccount = BankAccount(2000)

# Let me check if the balance is right.
print myAccount.balance()

# Let me deposit my salary
myAccount.deposit(10000)

# Let me withdraw some money to buy dinner.
myAccount.withdraw(15)

# What's the balance left?
print myAccount.balance()

类的实例始终作为类的方法的第一个参数传递。例如,如果有class A且您有实例a = A(),则无论何时拨打a.foo(x, y)Python都会自动调用foo(a, x, y) class A。 (注意第一个参数。)按照惯例,我们将第一个参数命名为self

答案 1 :(得分:7)

除了其他答案之外,您问题中的一点尚未解决:

  

是否有必要将__init__包含为第一个功能   每次在Python的课堂上?

答案是否定的。在您需要构造函数的情况下,它可以位于代码的任何位置,尽管传统和逻辑位置是开头。

答案 2 :(得分:6)

您不需要将它放在Class中,它就是对象构造函数。

如果您想要在实例化时自动发生事物,则需要它。

答案 3 :(得分:2)

不,没有必要在类中使用init。它是一个对象构造函数,在调用类时定义默认值。

如果你是以OOP方式编程,并且应该有你班级的基本结构。你经常需要这个。

我读了你关于

的其他子问题
  

你可以解释一下“自我”的使用吗? - 严厉于2011年7月28日5:13

请参阅stackoverflow中的这篇文章。有很多有用的链接可以帮助你更好地理解python的init函数。

Python __init__ and self what do they do?

答案 4 :(得分:1)

当然不需要这样做。

请阅读有关定义python类herehere的更多信息。

详细了解__init__ herePython __init__ and self what do they do?

一般来说,__init__是一种自动调用的构造函数,允许您执行任何其他操作(添加变量,调用任何方法等等) - 这样做的目的是能够初始化实例,因为它已创建,现在您可能需要在继续之前对其执行某些操作 - 例如记住创建时间或序列化其初始状态等等),同时创建对象。因此,如果您不需要做一些特殊准备,您可以跳过使用它。

答案 5 :(得分:1)

除了“ Action 10 Comedy 7 Remaining 15 ”语句外,还没有必要使用“ init ”语句进行跳转,或者跳转到代码的下一部分,或者仅达到跳转原因特殊的部分,例如“ if”语句。

答案 6 :(得分:0)

我最初也在这个问题上苦苦挣扎,然后我意识到这是将某些数据存储到您的对象的另一种方式,并且可以将数据传递给您定义的任何对象方法,因为您的实例方法具有一个可以指向其自身的自变量。您在init方法中创建的数据。

答案 7 :(得分:0)

没有必要... 它是每次在您的类中创建对象时都会运行的函数... 如果您希望每个对象都有一些共同点,这可能会有所帮助

答案 8 :(得分:0)

不,这不是必需的,但它在很多方面都有帮助。来自 Java 或 OOPS 背景的人更容易理解。 对于每个类实例,当我们通过创建对象实例化任何类时,都需要完成一个对象链。 如果我们不把它放在编译器/解释器上。但是当我们需要在创建对象时形成一些动作时,我们必须传递它。

first.py
-------
class A:
    def one(self):
        print("something")
second.py
----------
from first import A
class B:

    def test(self):
        a = A()
        x = a.one()
        print(x)
    test(any)
**output:**
something
None