2016-10-21 4 views
0

Ich versuche, eine einfache Datenbank von Schülern (Namen und Alter) zu bauen. Wenn ich versuche, einen bestehenden Schüler zu löschen und die Datenbank zu drucken, druckt es mich <class '__main__.data_base'>, aber wenn ich versuche, einen nicht existierenden Schüler zu löschen, druckt es die Datenbank gut.Klasse Objektdruck instatied des Inhalts

import pickle 
class data_base: 
    data={} 
    class __metaclass__(type): 
     def __iter__(self): 
      for attr in dir(data_base): 
       if not attr.startswith("__"): 
        yield attr 

    def __init__(self): 
     self.write("") 

    def write(self,my_data): 
     pickle.dump(my_data, open("database.p", "wb")) 

    def read(self): 
     return pickle.load(open("database.p", "rb")) 
    def delete_student(self): 
     #delete key and value 
     to_delete=raw_input("who do you want to delete? ") 
     my_data=self.read() 
     if to_delete in my_data.__iter__(): 
      my_data.pop(to_delete) 
      self.write(data_base) 
     else: 
      print "no such student" 

    def clear_data_base(self): 
     #delete data baase 
     self.write("") 

def main(): 
    first_data={"ben":10,"dan":6} 
    my_data_base=data_base() 
    my_data_base.clear_data_base() 
    my_data_base.write(first_data) 
    print my_data_base.read() 
    my_data_base.delete_student() 
    print my_data_base.read() 

Antwort

0

Das Problem ist hier:

self.write(data_base) 

Sie die Klasse Objekt gebeizt haben nicht die Instanz, die Sie in my_data lesen. Ändern Sie Ihre Methode zu

def delete_student(self): 
    #delete key and value 
    to_delete=raw_input("who do you want to delete? ") 
    my_data=self.read() 
    if to_delete in my_data.__iter__(): 
     my_data.pop(to_delete) 
     self.write(my_data) 
    else: 
     print "no such student" 
+0

ok, danke, dummer Fehler – user4719989