To jest bardzo podstawowe pytanie o OOP (używam pythona, ale tak naprawdę jest to pytanie pojęciowe, tak naprawdę nie specyficzne dla języka). Rozejrzałem się, ale żadne tutoriale ani książki nie obejmują tego konkretnego pytania. Jeśli jestem niejasny, przepraszam i chętnie wyjaśnię wszystko, co napisałem.Konceptualne pytanie początkującego o OOP i wytrwałości
Załóżmy, że tworzę prostą książkę adresową, którą chcę zapisać na dysku za pomocą pikli. Mam klasę o nazwie Contact
, gdzie __init__
przyjmuje niektóre argumenty (firstName i lastName) i mam menu, w którym można tworzyć kontakty, edytować je itp. Dla wszystkich przykładów OOP widziałem, że zrobiliby coś takiego ...
bob = Contact('Bob', 'Smith')
jane = Contact('Jane', 'Smith')
... aby utworzyć nowe wystąpienia kontaktu. Ale wszystkie są zdefiniowane przed uruchomieniem. Co się stanie, gdy wszystkie te wystąpienia będą tworzone w locie przez dane wejściowe użytkownika? Czy tworzę nowe wystąpienia dla każdej osoby? Jak mam to zrobić na podstawie danych wprowadzanych przez użytkownika? Następnie po prostu napisz wszystkie wystąpienia do listy i podnieś je? Albo zrobisz coś takiego ...
firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")
contact = Contact(firstName, lastName)
... a potem po prostu dołączyć do listy kontaktów i dostać nowe wartości dla instancji kontaktu za każdym razem chcę dodać użytkownika? Jest to kluczowa koncepcja, której tak naprawdę nie dostaję (ponieważ nie widziałem jej nigdzie wyjaśnionej). Wszystkie przykłady, które widziałem, nie robią powyższych, ale zamiast tego tworzą nowe instancje dla każdej rzeczy/osoby, ale wszystkie z nich są wstępnie zdefiniowane i nie są tworzone w locie. Byłbym bardzo wdzięczny, gdyby ktoś wyjaśnił mi tę koncepcję.
Czy mimo to należy podać dane wejściowe do nazwy instancji? Czy to całkowicie niepotrzebne? A może to możliwe? Myślę o czymś takim, jak powiedz ... firstName = raw_input ("Jakie jest twoje imię?") lastName = raw_input ("Jakie jest twoje nazwisko ?:") eval (firstName) = Contact (firstName, lastName) – johnharris85
@JHarris - to zależy od języka. PHP i JavaScript mogą to zrobić. C++/C# nie mógł. Jednak nie sądzę, że jest to właściwy sposób myślenia. Jeśli chcesz wyszukać kontakty według nazw, użyj typu "słownik" ("mapa" w niektórych językach). Zanieczyszczenie przestrzeni nazw zmiennymi dla każdego takiego kontaktu byłoby marnotrawstwem, a nawet wręcz niebezpiecznym (co jeśli ktoś tworzy kontakt z imieniem jak jedną ze zmiennych?) –