2017-09-29 1 views
-2
class Estudante: 
    def __init__(self,nome,numero_estudante): 
     self.nome=nome 
     self.numero_estudante=numero_estudante 
     self.cadeiras = [] 

    def enrol (self, curso_decorrer): 
     self.cadeiras.append(curso_decorrer) 
     curso_decorrer.add_estudante(self) 

class Departamento: 
    def __init__(self,nome, codigo_departamento, local): 
     self.nome=nome 
     self.codigo_departamento = codigo_departamento 
     self.local= local 
     self.cursos = [] 

    def add_curso(self,descricao,codigo_curso, creditos,departamento): 
     self.cursos[codigo_curso] = Curso(self,descricao,codigo_curso, creditos,departamento) 
     return self.cursos[codigo_curso] 

class Curso: 
    def __init__(self,descricao,codigo_curso, creditos,departamento): 
     self.descricao = descricao 
     self.codigo_curso= codigo_curso 
     self.creditos=creditos 
     self.departamento=departamento 
     self.departamento.add_curso(self) 
     self.decorridos =[] 

    def adicionar_ano(self,ano): 
     self.decorridos.append(Cursodecorrer(self,ano)) 
     return self.decorridos[-1] 

class Cursodecorrer: 
    def __init__(self,curso,ano): 
     self.curso = curso 
     self.ano = ano 
     self.estudantes =[] 

    def adicionar_estudante(self,estudante): 
     self.estudantes.append(estudante) 

Engenharia=Departamento("Departamento de Engenharia","001","Azurém") 
Matemática=Departamento("Departamento de Matemática","002","Braga") 
MIEBIOM=Departamento.add_curso("Engenharia Biomédica",'001-1',"55","Engenharia") 
MIEBIOL=Departamento.add_curso("Engenharia Biológica",'001-2',"55","Engenharia") 
MAT=Departamento.add_curso("Matemática",'002-1',"30") 
MIEBIOM_2017=Curso.adicionar_ano("2017") 
A74000=Estudante("Pedro Miguel","74000") 

Code error: MIEBIOM=Departamento.add_curso("Engenharia Biomédica",'001-1',"55","Engenharia")**Python ERROR: Typeerror: ... fehlt 1 erforderlich Positions Argument:

TypeError: add_curso() missing 1 required positional argument: 'departamento' 

Ich habe alles versucht, jemand weiß, was falsch ist?

+0

'MAT = Departamento.add_curso ("Matemática", '002-1', "30")' scheint, wie es ein Argument fehlt. – RagingRoosevelt

+0

Mögliches Duplikat von [TypeError: Fehlendes 1 benötigtes Positionsargument: 'self'] (https://stackoverflow.com/questions/17534345/typeerror-missing-1-required-positional-argument-self) – wwii

+0

Willkommen bei SO. Bitte nehmen Sie sich die Zeit, [ask] und die darin enthaltenen Links zu lesen. – wwii

Antwort

1

Ihre add_curso Funktion erfordert 5 Werte

def add_curso(self,descricao,codigo_curso, creditos,departamento): 

Aber Sie sind vorbei nur 4 Werte, wenn Sie es in dieser Zeile anrufen:

MIEBIOM=Departamento.add_curso("Engenharia Biomédica",'001-1',"55","Engenharia") 

So Python interpretiert es so:

self = "Engenharia Biomedica" 
descricao = "001-1" 
codigo_curso = "55" 
creditos = "Engenharia" 
departamento = !!Missing Value!! 

Hoffe das hilft.

1

Den Aufruf einer Methode direkt in einer Klasse sollten Sie nur mit Klassenmethoden machen. Sie sollten zuerst eine Instanz von Departamento erstellen, auf der Sie die Instanzmethode add_curso aufrufen können.

Hier ist ein Beispiel für einen solchen Code, in dem Sie zunächst eine Departamento erstellen und dann eine curso, um es hinzuzufügen, was ich denke, ist das, was Sie tun möchten:

dep = Departamento("name", "codigo dep", "local") 
dep.add_curso("Engenharia Biomédica",'001-1',"55","Engenharia") 

Sie können es sehen, eine Instanzmethode ist weil das erste Argument in der Methodendefinition self ist (dies ist eine Konvention).

Mehr über Klassenmethoden vs Instanzmethoden: Difference between Class and Instance methods

+0

Aber das habe ich schon gemacht, nicht wahr? mit: 'Engenharia = Departamento ("Departamento de Engenharia", "001", "Zu")' ' MIEBIOM = Departamento.add_curso ("Engenharia Biomédica", '001-1', "55",“ Engenharia ")' –

+0

Ja, aber Sie müssen den Variablennamen "Engenharia" und nicht den Klassennamen "Departamento" verwenden, um die Methode aufzurufen: 'Engenharia = Departamento ("Departamento de Engenharia", "001", "Azurém ") MIEBIOM = Engenharia.add_curso (" Engenharia Biomédica "," 001-1 "," 55 "," Engenharia ")' –

Verwandte Themen