[python, noobquestion, dna error] подскажите как сделать конструктор

Alena_08_11

В базовом классе объявлен метод

@classmethod
def get_prepared(cls, place):
...
instance = cls
...

где то в коде написано примерно так:

for ClassName in (ConcreteClass, AnotherConcreteClass ... ):
....
concreteInstance = ClassName.get_prepared(place=place)
....

СoncreteClass и AnotherConcreteClass унаследованы от базового, в котором определён вышеупомянутый метод.
python не знаю, в процессе изучения. Решил попробовать вот так. Обломался
....
instance = cls
TypeError: unbound method __init__ must be called with ConcreteClass instance as first argument (got nothing instead)
Можно ли осуществить, то что я задумал ? и как нада для этого переписать ?
ps. Я знаю что архитектура не правильна, я не должен этого хотеть бла бла. Я просто хочу заставить это хоть как нить работать.

Commandor

У тебя не в этом коде бага. Тут все нормально.
Покрайней мере такой код запускается и пашет
 

class A(object):
@classmethod
def p(cls, place):
instance = cls
return instance

class B1(A):
pass

class B2(A):
pass


for c in (B1,B2):
ins = c.p(place=0)
print type(ins)

host:~$ python x.py 
<class '__main__.B1'>
<class '__main__.B2'>

Alena_08_11

Да. по ходу в другом бага. Такая ошибка была когда в коде было instance = cls.__init__
Я поправил на cls а python console не перезагрузил. Просто тупо ещё раз импортнул функцию и запустил. Теперь буду знать, что надо перезапускать python console после каждого изменения.

tipnote

Теперь буду знать, что надо перезапускать python console после каждого изменения.
необязательно

bleyman

Он же приводит к миллионам глюков!
Как минимум, если ты делаешь import a из консоли, в a делается from b import x, а потом ты делаешь reload(b это никак не повлияет на a.x. И таких сценариев тысячи, тысячи!

tipnote

Существует миллиард простейших сценариев, где релоад нужен. Использовать его на продакшне для перегрузки модулей очевидно не стоит.
А в консоли заниматься отладкой чего-то тяжелого вообще странно.
К тому же написано "необязательно", не? В общем, я не понял, с чего ты так закипешил.

Phoenix

быть может, его подсознание запомнило фразу топикстартера

ps. Я знаю что архитектура не правильна, я не должен этого хотеть бла бла. Я просто хочу заставить это хоть как нить работать.

да и потом. человека не напрягает в консоли команды писать, а не разобраться один раз с тестами и не мучаться, ну или проект горит.
Так что ты свои советы, считай, напрямую в продакшен коммитишь.
прикинь, это будет один из сайтов госуслуг за 50лямов.
20милионов пользователей будет материться, а ты гордо про себя подумаешь "а это я посоветовал".

tipnote

20милионов пользователей будет материться, а ты гордо про себя подумаешь "а это я посоветовал".
Я при совете дал ссылку на документацию. Там вполне себе описано, что происходит. Так что я чист :)

Phoenix

microsoft вот тоже документацией трясли. Но толпа считает, что их недокументированные функции должны работать и во всём виноват Билл Гейтс!
Оставить комментарий
Имя или ник:
Комментарий: