Нужно ли включать __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?
Ответы
Ответ 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__ и себя, что они делают?