Подтвердить что ты не робот

Нужно ли включать __init__ в качестве первой функции каждый раз в классе в 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 для вызова методов? Может кто-нибудь объяснить использование "я" подробно?

Кроме того, почему мы используем оператор pass в Python?

4b9b3361

Ответ 1

Нет, это необязательно.

Например.

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 the balance left?
print myAccount.balance()

Экземпляр класса всегда передается как первый аргумент методу класса. Например, если есть class A, и у вас есть экземпляр a = A(), всякий раз, когда вы вызываете a.foo(x, y), Python автоматически вызывается foo(a, x, y) из class A. (Обратите внимание на первый аргумент.) По условному обозначению мы называем этот первый аргумент как self.

Ответ 2

Это на самом деле комментарий к ответу Susam, но, поскольку мой представитель по-прежнему низкий, я добавляю его в качестве ответа.

Стоит отметить, что в этом случае:

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

A фактически наследует метод __init__ от object.

Ответ 3

Вам не нужно помещать его в свой класс, это конструктор объекта.

Он вам понадобится, если вы хотите, чтобы что-то произошло автоматически с вашим объектом, когда оно было вызвано.

Ответ 4

В дополнение к другим ответам, один вопрос в вашем вопросе, который не был рассмотрен:

Нужно ли включать __init__ в качестве функции firstкаждый раз в классе в Python?

Ответ - нет. В случае, если вам нужен конструктор, он может быть расположен в любой позиции вашего кода, хотя обычное и логическое место - это начало.

Ответ 5

Уверен, что этого не требуется.

Подробнее об определении классов python здесь и здесь.

Подробнее о __init__ вы можете здесь и Python __init__ и себя, что они делают делать?.

Обычно __init__ - это тип конструктора, который вызывается автоматически и позволяет выполнять любые дополнительные действия (добавление переменных, вызов любых методов и т.д.), идея состоит в том, чтобы иметь возможность инициализировать экземпляр, поскольку он уже и теперь вам может понадобиться что-то сделать с ним перед продолжением - например, запомнить время создания или сериализовать его начальное состояние и т.д.) при создании объекта. Поэтому, если вам не нужно делать какую-либо специальную подготовку, вы можете пропустить ее.

Ответ 6

Нет, нет необходимости использовать init в классе. Это конструктор объекта, который определяет значения по умолчанию при вызове класса.

Если вы программируете в стиле ООП и должны иметь базовую структуру своего класса. Вам это часто понадобится.

Я прочитал ваш другой вопрос о

Можете ли вы объяснить об использовании "я"??? - суровый июль 28 '11 в 5:13

Пожалуйста, обратитесь к этому сообщению в stackoverflow. Там много полезных ссылок, которые помогут вам лучше понять функцию инициализации python.

Python __init__ и себя, что они делают?