Я хотел бы получить несколько советов о том, как лучше извлекать объекты из конструкции «я» по имени, чтобы объект возвращался для предоставленной строки его типа.
Мой рабочий код представлен ниже.
def makeObjectTypeList(self):
objectList = []
allObjects = dir( self )
for att in allObjects:
test = getattr(self, att)
test1 = test.__class__.__name__
test2 = len( re.split( self.objectType, test1) )
if test2 > 1:
objectList.append( att)
self.objectList = objectList
Значением для self.objectType является строка 'QDial'. И я возвращаю все экземпляры объектов QDial из метода методом re.split() и проверкой на количество элементов в его результате (например, len(re.split()) > 1).
Мой вопрос заключается в том, как сделать это более компактным, используя «перечисление» и т. д. в режиме кодирования Python. Мой код является общим, поэтому я могу передать его «QLablel», «QTabWidget» и т. д. в self.objectType и получить все такие экземпляры с совпадением типов. Но это кажется неуклюжим, и я пока не утруждаю себя ловушкой для случая несуществующего типа класса.






Вы можете использовать понимание списка, которое перебирает пары атрибут-значение словаря, возвращаемого функцией vars, и сохраняет только те, чей класс значения соответствует self.objectType:
def makeObjectTypeList(self):
self.objectList = [k for k, v in vars(self).items() if v.__class__.__name__ == self.objectType]