Найти - Пользователи
Полная версия: как сделать для функции второй __init__ ?
Начало » Python для экспертов » как сделать для функции второй __init__ ?
1 2
124bit
,,?
shiza
Эм???
А что должен делать второй __init__?
И что вообще должен делать __init__ в ФУНКЦИИ? ;)
Lolka
Все дружно включили телепатию :)
Может это из разряда
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
124bit
гм.. я думал вы лучшие телепаты))) вы должны были протелепатировать, что у мя зашли шарики за ролики))
включил мозги и понял, что реально дурацкий вопрос…
но все же, вот например когда я создаю экземпляр класса там обязательно запускается __init__, так? а если я хочу создать экземпляр класса чтоб потом нормально запускать из него функции, не запуская __init__, который там обязательно присутствует, а запуская __init2__ или вообще ниче не запуская.. как это сделать,? или я опять какой то бред спросил,… ато чето мозг не работает щас(?
shiza
Ну как нормальный телепат я тебе и телепатировал в мозг, что у тебя шарики за ролики заехали. И то что ты написал это в форуме, гвоорит о том, что транзакция прошла успешно.

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 минут до того как написал это здесь. Сверься с этим постом, что передача мысли прошла без искажений.
Ferroman
Хе, надо добавлять группу телепаты на форум :).
ZAN
shiza
На всякий случай уточняю, что __init__ - это конструктор класса, он вызывается когда создается экземпляр класса ( но не когда вызывается какая-нибудь функция).
Конечно, полемика, но… в питоне конструктором является метод __new__ - именно он создает и возвращает экземпляр класса. __init__ только модифицирует его (в обязательном порядке, если метод __new__ отработал успешно).
shiza
ZAN
Конечно, полемика, но… в питоне конструктором является метод __new__ - именно он создает и возвращает экземпляр класса. __init__ только модифицирует его (в обязательном порядке, если метод __new__ отработал успешно).
Это да, но лучше туда без крайней нужды не лазить imho =)
ZAN
Это точно :)
bw
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB