Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 21, 2008 00:03:16

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

,,?



Офлайн

#2 Окт. 21, 2008 00:11:49

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

Эм???
А что должен делать второй __init__?
И что вообще должен делать __init__ в ФУНКЦИИ? ;)



Отредактировано (Окт. 21, 2008 01:22:48)

Офлайн

#3 Окт. 21, 2008 01:13:43

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

Все дружно включили телепатию :)
Может это из разряда

class Parent(object):
def __init__(self, x):
self.x = x
class Child(Parent):
def __init__(self, x, y):
super(Child, self).__init__(x)
self.y = y



Офлайн

#4 Окт. 21, 2008 01:32:43

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

гм.. я думал вы лучшие телепаты))) вы должны были протелепатировать, что у мя зашли шарики за ролики))
включил мозги и понял, что реально дурацкий вопрос…
но все же, вот например когда я создаю экземпляр класса там обязательно запускается __init__, так? а если я хочу создать экземпляр класса чтоб потом нормально запускать из него функции, не запуская __init__, который там обязательно присутствует, а запуская __init2__ или вообще ниче не запуская.. как это сделать,? или я опять какой то бред спросил,… ато чето мозг не работает щас(?



Офлайн

#5 Окт. 21, 2008 01:41:41

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

Ну как нормальный телепат я тебе и телепатировал в мозг, что у тебя шарики за ролики заехали. И то что ты написал это в форуме, гвоорит о том, что транзакция прошла успешно.

124bit
но все же, вот например когда я создаю экземпляр класса там обязательно запускается __init__, так? а если я хочу создать экземпляр класса чтоб потом нормально запускать из него функции, не запуская __init__, который там обязательно присутствует, а запуская __init2__ или вообще ниче не запуская.. как это сделать,? или я опять какой то бред спросил,… ато чето мозг не работает щас(?
На всякий случай уточняю, что __init__ - это конструктор класса, он вызывается когда создается экземпляр класса ( но не когда вызывается какая-нибудь функция).
Если формально подойти к вопросу, то так можно сделать.
class o:
def __init__(self, flag = False):
if flag:
self.__init2__()
else:
self.__init3__()

def __init2__(self):
pass

def __init3__(self):
pass
o1 = o()
o2 = o(True)
Я телепатировал тебе вышенаписанное за 5 минут до того как написал это здесь. Сверься с этим постом, что передача мысли прошла без искажений.



Отредактировано (Окт. 21, 2008 01:47:49)

Офлайн

#6 Окт. 21, 2008 02:32:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

Хе, надо добавлять группу телепаты на форум :).

Офлайн

#7 Окт. 21, 2008 11:19:30

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

shiza
На всякий случай уточняю, что __init__ - это конструктор класса, он вызывается когда создается экземпляр класса ( но не когда вызывается какая-нибудь функция).
Конечно, полемика, но… в питоне конструктором является метод __new__ - именно он создает и возвращает экземпляр класса. __init__ только модифицирует его (в обязательном порядке, если метод __new__ отработал успешно).



Офлайн

#8 Окт. 21, 2008 12:06:27

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

ZAN
Конечно, полемика, но… в питоне конструктором является метод __new__ - именно он создает и возвращает экземпляр класса. __init__ только модифицирует его (в обязательном порядке, если метод __new__ отработал успешно).
Это да, но лучше туда без крайней нужды не лазить imho =)



Офлайн

#9 Окт. 21, 2008 12:30:12

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

как сделать для функции второй __init__ ?

Это точно :)



Офлайн

#10 Окт. 21, 2008 13:14:30

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

как сделать для функции второй __init__ ?

import new

class A:

def init1(self):
pass

def init2(self):
pass

a1 = new.instance(A)
a1.init1()

a2 = new.instance(A)
a2.init2()
__init__ не будет вызываться вообще, если ты это не сделаешь руками. Такой способ работает только на объектах старого типа. Можно придать механизму более презентабельный вид:
>>> class A:
...
... def __init__(self):
... assert False
...
... @classmethod
... def create1(cls):
... import new
... self = new.instance(cls)
... self.name = 'create1'
... return self
...
... @classmethod
... def create2(cls):
... import new
... self = new.instance(cls)
... self.name = 'create2'
... return self
...
>>> A.create1().name
'create1'
>>> A.create2().name
'create2'
..bw



Отредактировано (Окт. 23, 2008 00:31:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version