2017-08-27 5 views
0

Ich versuche eine 'Group Chat' Klasse zu erstellen, die einige ihrer Attribute von der Hauptklasse 'Chat' erbt. Ich erhalte einen Fehler in der Zeile "super (chat_id, user1). init()". Ich kann es nicht reparieren!TypeError: super() Argument 1 muss type sein, nicht int (Python)

class Chats(object): 

def __init__(self, chat_id, user1): 
    self.id = chat_id 
    self.initiator = user1 
    self.messages = {} #key is current date/time; value is a list of messages 


class GroupMessage(Chats): 

def __init__(self, chat_id, user1, group_name, message): 
    super(chat_id, user1).__init__() 
    self.group = group 
    self.messages[datetime.datetime.now()] = self.messages[datetime.datetime.now()].append(message) 

Nach 'GroupMessage' instanziiert wird, bekomme ich einen Fehler!

> Chat_group = GroupMessage(1, "Batool","AI_group","Text Message") 

Typeerror: super() Argument 1 muss Typ sein, int nicht

+0

Nun, wie es heißt, müssen Sie einen Typ als erstes Argument übergeben, keine Ganzzahl. Haben Sie [die Dokumentation] (https://docs.python.org/3/library/functions.html#super) gelesen? – kindall

+2

das ist nicht wie es ist ... ändern Sie Ihren Aufruf zu "Super" mit: 'super() .__ init __ (chat_id, user1)' – alfasin

+0

@alfasin, hatte ich zunächst so gemacht, aber habe diesen Fehler: TypeError: super() benötigt mindestens 1 Argument (0 gegeben). – Batool

Antwort

3

Sie sollten statt super(chat_id, user1).__init__() tun sollten Sie tun:

super().__init__(chat_id, user1) # Work in Python 3.6 
super(GroupMessage, self).__init__(chat_id, user1) # Work in Python 2.7 

oder

Chats.__init__(self, chat_id, user1) 

Diese Die letzte Option wird nicht empfohlen, wenn die Änderung der Klassenhierarchie in der Zukunft geändert wird. Ich mag es wirklich nicht für andere Motive, aber immer noch eine Erwähnung wert.

+0

Der zweite funktionierte mit meinem 2.7! :) – Batool

Verwandte Themen