Как проверить, если объект уже вызван в Python? - PullRequest
0 голосов
/ 09 мая 2011

Я создал графический интерфейс с помощью PyGTK.

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

try:
    self.main.addServer(self.factory.logingo)
except:
    self.main = MainWindow(self.factory.loginfo)

Я хочу вызвать addServer, когда мой объект self.main (который является моим объектом gtk.Window) уже существует.Но если он не существует, я хочу вызвать MainWindow, который создает gtk.Window.Моя проблема в том, что моя попытка никогда не увенчается успехом, и я всегда заканчиваю исключением и воссоздаю self.main.

Как это сделать?Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2011
if not hasattr(self, 'main'):
    self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)

PS: будьте осторожны с try: ... except: ... без каких-либо особых исключений, если только вы не знаете, что делаете.потому что это скрывает вероятные (и неожиданные) исключения.Вместо этого, например, напишите:

try:
    ...
except AttributeError:
   ...

или что-либо, что ожидается и будет обработано, вместо AttributeError (например, KeyError или IndexError или ImportError или что-то) И напишитекак можно меньше кода в блоке try, например, вы можете написать приведенный выше код следующим образом:

try:
    self.main
except AttributeError:
    self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)

Это эквивалентно этому (интересно знать, что сам hasattr использует попытку кроме!),Но использование hasattr здесь чище и короче.

...