2017-12-25 2 views
1

Wenn ich die project_task.fromid() aufrufen und versuchen, auf die project_task.(id/name/type) zuzugreifen, warum sagt Python mir, dass diese Klasse keines dieser Attribute hat?Klassenattribute, die nicht von Parent im Konstruktor python initialisiert werden

class project_task(task): 

    def __init__(self, project_id, name, duration, deadline, done, id = None): 
     if not id: 
      task.__init__(name, 0) 
     else: 
      task.fromid(id) 

     self.project_id = project_id 
     self.duration = duration 
     self.deadline = deadline 
     self.done = done 

    @classmethod 
    def fromid(cls, id): 
     db.cursor.execute('''SELECT * FROM project_task WHERE id=?''', [id]) 

     try: 
      result = db.cursor.fetchone() 
      return cls(result[1], None, result[2], result[3], result[4], id) 
     except: 
      return None 


class task: 

    def __init__(self, name, type, id = None): 

     self.name = name 
     self.type = type 
     self.id = id 

    @classmethod 
    def fromid(cls, id): 
     db.cursor.execute(''' SELECT * FROM task WHERE id = ? ''', [id]) 

     try: 
      result = db.cursor.fetchone() 
      return cls(result[1], result[2], id) 
     except: 
      return None 
+0

Zeigen Sie den genauen Code an, den Sie für den Zugriff und die vollständige Rückverfolgung verwenden. –

Antwort

1

Sie müssen self passieren, wenn Sie die übergeordnete Klasse init aufrufen. Der beste Weg dazu ist über super().

Ihr alternativer Konstruktor wird jedoch nicht funktionieren, wenn es aus dem init aufgerufen wird; Was passiert, ist, dass Sie eine Aufgabeninstanz konstruieren und sie komplett wegwerfen. Stattdessen sollten Sie eine Methode haben, um die relevanten Werte zurückzugeben und sie sich selbst zuzuordnen.

+1

Bitte korrigieren Sie '..' zu' .' in Ihrer letzten Zeile. –

+0

@GarbageCollector erledigt, danke. –

+0

@DanielRoseman danke – CaMMelo

-2

Bitte beachten Sie Ihren Code: "Wenn nicht ID:". Sie sollten die Existenz von ID in einer Variablen, einer Liste oder einer anderen ähnlichen Datenstruktur überprüfen. Also, sollten Sie den Code wie dies geändert werden:

if not id in variable: 
+2

Das ist falsch. 'if not id' ist vollkommen korrekt und idiomatisch Python. –

Verwandte Themen