2016-12-13 4 views
0

Я пытаюсь добавить элемент в список, но я получил эту ошибку. Я проверяю, являются ли типы двух объектов одинаковыми, и если они имеют один и тот же тип, чем я добавляю его. Итак, следующая функция - это то, где я получил ошибку. Класс содержит элементы.'str' объект не имеет атрибута 'get_type' ERROR

def LogsBeiTyp(self,list,type): 

    """ 
    Thid funftion return a list that contains all logs group by a type 
    :param list: a list that contains all object logare 
    :return: a list modified in such a way thet elements are gropu by type 
    """ 

    l=[] 

    for el in list: 
     if el.get_type()==type: 
      l.append(el) 

    return l 

И это класс:

class Logare(): 

    """ 
    This class contains information about a log 
    It is known that each log has a date,type,description 
    """ 

    def __init__(self,date,time,type,melldung): 
     """ 

     The incresemnt function 

     :param date: a string which is written as "YYYY-MM-DD" 
     :param type: a string that contains in cappital letters the type of thr log 
     :param description: a string that contains more details about the log 
     """ 

     self.date=date 
     self.time=time 
     self.type=type 
     self.melldung=melldung 

    def get_date(self): 
     return self.date 

    def get_time(self): 
     return self.time 

    def get_type(self): 
     return self.type 

    def get_melldung(self): 
     return self.melldung 

    def __str__(self): 
     return '%s %s %s %s'%(self.date,self.time,self.type,self.melldung) 

Вот где я BILD список

from LogDatei.LogDatei import * 
from Date.Date import * 
from Melldung.Melldung import * 
from Time.Time import * 
class Repo(): 

    """ 
    This class contains the most important methonds 
    """ 

    def __init__(self,filename): 

     """ 
     The initialization function 
     :param filename: the name of the file you want to take the information 
     """ 
     self.filename=filename 

    def get_all(self): 

     """ 
     This function reads all lines from a file 
     It grpups in in object Logare that is build from date,type and melldung 
     date and melldung are classes also 
     :return: a list that contains all information from file 
     """ 

     rez=[] 
     f=open(self.filename,'r') 

     for line in f: 

      tolks=line.split(' ',3) 
      date=tolks[0].split('-',2) 
      time=tolks[1].split(':',2) 
      melldung=tolks[3].split(':') 
      final=melldung[1].split('-') 
      #date(date[0],date[1],date[2]) 
      #time() 
      rez.append(Logare(date,time,tolks[2],Melldung(melldung[0],final[0],final[1],melldung[2]))) 

     return rez 

В функции get_all() Я построил список, чем я послал его к контроллеру где i haev функция

+0

Вы можете разместить трассировку стека для исключения? – TemporalWolf

+0

'for el in list' вы имеете в виду' for el in l' здесь, я думаю EDIT: nvm, но не называю вещи 'list', это встроенный –

+1

Несвязанный: Плохая идея перезаписать встроенные модули вроде [ list] (https://docs.python.org/3/library/functions.html#func-list) и [type] (https://docs.python.org/3/library/functions.html#type) , – Matthias

ответ

0

Это можно решить, используя isinstance. Используя эту конструкцию вы могли бы:

def LogsBeiTyp(self,list,class_type): 

    """ 
    Thid funftion return a list that contains all logs group by a type 
    :param list: a list that contains all object logare 
    :return: a list modified in such a way thet elements are gropu by type 
    """ 

    l=[] 

    for el in list: 
     if isinstance(el, class_type): 
      l.append(el) 

    return l 

Как уже упоминалось, используя комментарии, используя предопределённые (т.е. типов) для имени переменной не является хорошей идеей.

Вызов этого в классе Logare и ищет экземпляры Logare в списке элементов будет выглядеть примерно так:

my_logs = self.LogsBeiTyp(elements, Logare) 
+1

Это решение для групповой помощи. Он должен выяснить, почему в списке содержится то, что не является «Logare», и исправить это. – Barmar

+0

Logare не является классом, это просто имя файла python – Mary

+0

Это не поможет. get_type возвращает пользовательское значение, а не тип класса. – Iarwa1n

Смежные вопросы