Ξέχνα classmethod και staticmethod. Δεν έχουν εφαρμογή εδώ. Βασικά classmethod ούτε εγώ έχω καταλάβει πότε πρέπει να χρησιμοποιούνται.
Αν θυμάμαι καλά, όλες οι κλάσεις στην python 3 κληρονομούν από την βασική κλάση object. Αν παίξεις λίγο με το mro (method resolution order) θα το δεις. Στην python 3 τα δύο ακόλουθα είναι ισοδύναμα.
class Foo(object) :
class Foo:
Οι συναρτήσεις μιας κλάσεις, λέγονται "μέθοδοι"

Ξανάδιάβασε λίγο για αντικειμενοστραφή προγραμματισμό. Αν θελεις να κάνεις και GUI θα σε βοηθήσει. Βέβαια και το GUI θα σε βοηθήσει να καταλάβεις αντικειμενοστραφή καλύτερα. Αλλά ξεκινα από τα πιο βασικά. Αυτό που κάνεις τώρα είναι μια χαρά για να εφαρμόσεις αντικειμενοστραφείς έννοιες.
- Κώδικας: Επιλογή όλων
class Contact(object):
def __init__(self, name, index):
super(Contact, self).__init__()
self.name = name
self.index = index
class AddressBook(object):
def __init__(self):
super(AddressBook, self).__init__()
self.contacts = {}
def add_contact(self, name, index):
if index not in self.contacts:
contact = Contact(name, index)
self.contacts[index] = contact
print("Added contact")
else:
print("A contact with the same index number already exists.")
def remove_contact(self, index):
if index in self.contacts:
self.contacts.pop(index)
print("Removed Contact")
else:
print("Couldn't find a contact with the given index number.")
def print_contacts(self):
for key, value in self.contacts.items():
print("Id : {0} - {1}".format(key, value.name))
def main():
my_book = AddressBook()
my_book.add_contact("Hlias", 1)
my_book.add_contact("Maria", 2)
my_book.add_contact("Giannis", 1)
my_book.print_contacts()
my_book.remove_contact(3)
my_book.remove_contact(2)
my_book.print_contacts()
if __name__ == "__main__":
main()
Κάτι τέτοιο εννοώ. Δεν χρησιμοποιώ την database, αλλά ένα dictionary για λόγους απλότητας. Η λογική θα είναι αντίστοιχη πάντως. Απλά αντί να προσθέτεις στο dict θα συνδέεσαι στη βάση και θα τα κάνεις από εκεί (add, remove κτλ).
Edit
----
Ιδίως αν σκοπεύεις να κάνεις γραφικό. Μη χάνεις χρόνο με τα Input Output από πληκτρολόγιο. Δώσε βάση στη λειτουργία του προγράμματος. Το τεστάρεις καλώντας μόνος σου τις μεθόδους από τη main(). Άλλο feature που μπορείς να βάλεις είναι ένα
logger(κρατάς
logμε τα transactions στη database). Επίσης για αυτό που θέλεις να κάνεις, η sqlAlchemy είναι μάλλον overkill και εισάγεις και βαρβάτο dependeny. Χρησιμοποίησε καλύτερα SQLite που είναι και στη standard library.