LINUX.ORG.RU

[python][туплю]циклится

 ,


0

0

Вот этот код зацикливается. Пока писал этот пост понял почему. Подозреваю это из-за того что в в конструктор Abstract передаётся self от инстанса Concrete где __class__ равен самому внешнему классу.

Получается что вызывать super(self.__class__, self).__init__() небезопасно?

import threading

class Abstract(threading.Thread):
    def __init__(self):
        print("Abstract")
        super(self.__class__, self).__init__()

class Concrete(Abstract):
    def __init__(self):
        print("Concrete")
        super(self.__class__, self).__init__()

#here all okay
Abstract()
#fail :(
Concrete()
★★★★★

super(self.__class__, self) никто не использует.

Явно указывайте класс: super(Concrete, self).__init__()

ntp
()
Ответ на: комментарий от dimon555

Ты руками код вбивал? copy-paste в файл и запуск без проблем работают.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от ntp

Да, я везде видел только явное указание класса. Теперь я понял почему.

Жаль, в процессе написания я много раз меняю названия и поправить во втором месте часто забываю.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Редактор с рефакторингом (или хотя бы заменой)?

Ну или Python3 там это неудачное решение немного исправили.

ntp
()
Ответ на: комментарий от dimon555

__name__ вернёт строку, а super нужно класс.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от ntp

Редактор с рефакторингом (или хотя бы заменой)?

vim :). Немного неправильно выразился. Основная мысль этого кода была в том что я мышкой или через yy копировал этот код во все классы которые нужно. А если там будет захардкодено имя класса то я иногда забываю менять :).

Ну или Python3 там это неудачное решение немного исправили.

А что там? Я, честно говоря, не в курсе.

true_admin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.