Форум сайта python.su
88
i_am_kislyобратите внимание:class Foo(object): key = 0 pass f = Foo() f.key = 1 g = Foo() f.key = 2 h = Foo() f.key = 3 j = = Foo() f.key = 4 ... x = Foo() f.key = 100500
>>> class Foo(object): key = 0 >>> f = Foo() >>> f.key 0 >>> Foo.key 0 >>> f.key = 1 >>> f.key 1 >>> Foo.key 0 >>> Foo.key = 2 >>> f.key 1 >>> Foo.key 2 >>>
Офлайн
0
еще один вопрос ( к сожалению далеко не последний )
допустим есть некая строка S = ‘penelopa’, как создать класс с именем из этой строки ? мне без гуру не обойтись ((
и как потом к нему обратиться, зная только эту строку
Отредактировано i_am_kisly (Июнь 19, 2013 23:34:48)
Офлайн
20
Если не секрет, какую задачу вы пытаетесь решить этим и предыдущим способом?
Офлайн
0
да так, просто учусь
пишу всякую дребедень, помогает расслабить мозг на работе
Отредактировано i_am_kisly (Июнь 19, 2013 23:58:13)
Офлайн
568
i_am_kisly
допустим есть некая строка S = ‘penelopa’, как создать класс с именем из этой строки ? мне без гуру не обойтись ((
S = "Penelopa" globals().update({S: type(S, (), {})}) print Penelopa
Офлайн
0
блиин (( я в печали
этот код работает
# -*- coding:utf-8 -*- InstancesList = dict() def get_instance_by_attribute(attr_name): class wrapper(object): def __init__(self, cls): self.cls = cls setattr(cls, "get_by_attr", self.get_by_attr) def __call__(self, *args, **kwargs): instance = self.cls(*args, **kwargs) InstancesList.setdefault(self.cls, list()).append(instance) return instance def get_by_attr(self, value): return [x for x in InstancesList[self.cls] if getattr(x, attr_name) == value] return wrapper @get_instance_by_attribute("key") class Foo(object): pass class X(object): file = [] def ololo(self): f = Foo() f.key = 1 f.d = 1 g = Foo() g.key = 2 g.d = "ff" h = Foo() h.key = 3 h.d = False j = Foo() j.key = 4 j.d = 5.77 x = Foo() x.key = 100500 x.d = 123 y = Foo() y.key = 100500 y.d = "Bar" self.file.append(f) self.file.append(g) self.file.append(h) self.file.append(x) self.file.append(y) #def ololo2(self): print self.file for instance in Foo.get_by_attr(100500): print instance, instance.d Y = X() Y.ololo() #Y.ololo2()
InstancesList = dict() def get_instance_by_attribute(attr_name): class wrapper(object): def __init__(self, cls): self.cls = cls setattr(cls, "get_by_attr", self.get_by_attr) def __call__(self, *args, **kwargs): instance = self.cls(*args, **kwargs) InstancesList.setdefault(self.cls, list()).append(instance) return instance def get_by_attr(self, value): return [x for x in InstancesList[self.cls] if getattr(x, attr_name) == value] return wrapper @get_instance_by_attribute("file_name") class excel_file_class(object): pass class Ui_MainWindow(object): list_of_files2 = [] def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(720, 864) .......................................................................... def open_excel(self): # если в комбо-боксе установлено 'New', то продолжаем, если нет - ничего не делаем if (self.cb_get(self.cb_filename) == 'New') : # вызываем QT-Open, получаем путь до файла temp_file = self.openFile() # проверка на отмену Qt Open File if temp_file == '' : print '__ QT FileOpen __ действие отменено' pass else : # если значение не пустое, то # создаем обьект класса excel_file_class file_list_temp = excel_file_class() # заполняем путь до файла file_list_temp.path_to_file = str( temp_file ) # получаем имя файла file_list_temp.file_nane = self.int_split( file_list_temp.path_to_file ) # открываем excel файл. # 0 - object of book # 1 - num of sheet # 2 - list of sheet name temp = excel.open_xls(file_list_temp.path_to_file) # первый (нулевой) элемент возвращенного списка - обьект книги ( см. выше ) file_list_temp.object_of_book = temp[0] # второй (первый) элемент - количество страниц в книге file_list_temp.num_of_sheets = temp[1] # третий (второй) элемент - список имен страниц в книге file_list_temp.name_of_sheets = temp[2] # добавляем получившийся класс в переменную более высокого уровня print self.list_of_files2 self.list_of_files2.append(file_list_temp) # по идее проверку надо вкорячить где-то тут # методом проб, проверка будет по имени. if file_list_temp.file_nane in self.list_of_files : # сделать всплывающее окно, в следующем релиз-кандидате гы-гы-гы print 'дубликат? Не будет добавлен' else : # если значение уникально, то self.list_of_files.append(file_list_temp.file_nane) # добавляем итем в комбобокс self.cb_add(file_list_temp.file_nane, self.cb_filename) #при выборе файла в комбобоксе - обновить комбобокс страниц #тестовый код for instance in excel_file_class.get_by_attr('---.xls'): print instance, instance.name_of_sheets else : print 'Выберете пункт New' print 'end of open_excel'
for instance in excel_file_class.get_by_attr('---.xls'): print instance, instance.name_of_sheets
Отредактировано i_am_kisly (Июнь 20, 2013 10:25:12)
Офлайн
568
file_list_temp.file_nane
Офлайн
0
стыдно ((
Офлайн
43
тогда может и в декоратор эту твою file_nane (/me посмотрел в словаре что же это такое) нужно писать?
@get_instance_by_attribute("file_name")
Офлайн