• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie obiektu, który jest słownikiem

Object Storage Arubacloud
0 głosów
218 wizyt
pytanie zadane 19 kwietnia 2019 w Python przez periedynek Obywatel (1,320 p.)

Cześć. Mam za zadanie zrobić klasę coś ala automat, która przechowuje informacje o towarach znajdujących się w nim (przedmioty o numerach od 30 do 50), każdy o określonej cenie w określonej liczbie (domyślnie po 5 sztuk każdego towaru).

Wymyśliłem na to sposób, aby był to słownik, którego kluczem jest ID, a wartością lista [ilość, cena] (jako, ze ilość się zmienia, czyli: {ID,[ilość,cena]}.

W mainie stworzyć 20 obiektów w ten sposób. 

Myślicie, ze jest to dobry pomysł?

Jak takie coś zrobić, kombinowałem coś ala to:

 

class Item:
    def __init__(self, ID, amount, price):
        self.ID = ID
        self.amount = amount
        self.price = price
        self._lista = [self.amount, self.price]

Tylko jakoś tutaj ten słownik trzeba wcisnąć, ale nie wiem jeszce jak.

2 odpowiedzi

+1 głos
odpowiedź 19 kwietnia 2019 przez Secrus Nałogowiec (32,880 p.)
Ja bym to zrobił w takiej formie:

klasa Container (lub dowolna inna nazwa, oznaczająca zbiór przechowywanych obiektów), mająca listę obiektów Item

klasa Item, która wygląda podobnie do tego co wrzuciłeś, tylko bez pola _lista, jest ono niepotrzebne (chyba, że coś źle zrozumiałem)
komentarz 19 kwietnia 2019 przez periedynek Obywatel (1,320 p.)
Lista jest potrzebna dla kazdego produktu, aby przetrzymywac cene i ilość, bede miec slownik w postaci {ID,[ilosc,cena]}, przez co bede miec caly Produkt w jednym miejscu. Aczkolwiek, nie wiem do konca jak mam to zrealizować.

Co myślisz o tym?

Klasa Container miała byc miec w sobie liste i do tej listy mialbym dodawać każdy produkt?
komentarz 19 kwietnia 2019 przez Secrus Nałogowiec (32,880 p.)


class Container:
    id = 1
    def __init__(self, objects = {}):
        self.objects = objects

    def add_object(self, obj: Item):
        self.objects += {id:obj}
        id += 1

class Item:
    def __init__(self, price, amount):
        self.price = price
        self.amount = amount

Mniej więcej tak, ale bez wiedzy na temat tego do czego to ma być itp to ciężko to dobrze zamodelować. Kod pisany na kolanie na szybko wiec moze byc blad jakis

komentarz 19 kwietnia 2019 przez periedynek Obywatel (1,320 p.)
Nienie.

To ma być automat, gdzie użytkownik wybiera numer produktu i później wrzuca pieniądze, ale to inna bajka.

Dlatego nie może być tak, że ID jest dodawane jakoś tam, to musi być na sztywno wpisana informacja. Widzę, że itemy przechowujesz w secie(container). Item jako np. Cola ma ID 30 i to musi być tak zrobione.

 

Jak użytwkonik wybierze numer, to ta ilość się właśnie zmniejsza. Musze miec dostep do ceny i do ilośći, a ID jest potrzebne aby wyszukać to właśnie.
komentarz 19 kwietnia 2019 przez Secrus Nałogowiec (32,880 p.)
to nie set, a dict. jeśli chodzi o ID to wystarczy ze w deklaracji klasy zmienisz 1 na 30 i dodasz przy dodawaniu itemu do slownika warunek sprawdzajacy czy ID zostal przekroczony. a do ilości i ceny masz dostęp, wystarczy, że wyciągniesz obiekt ze słownika po kluczu, którym jest ID
komentarz 19 kwietnia 2019 przez periedynek Obywatel (1,320 p.)
Ale to nie jest mylące?

Kontener jako zbiór itemów, a informacje jakie mam o samym itemie o tylko ilość i cena, żadnej nazwy (czy też ID w tym przypadku).
0 głosów
odpowiedź 19 kwietnia 2019 przez Ajver Bywalec (2,430 p.)
W moim odczuciu wygląda spoko. Tylko pytanie jak chcesz tego używać później? Masz klasę, która przechowuje w sobie 20 itemów i dajesz jej metodę w stylu get_item( ID ), która zwraca item o odpowiednim id?
komentarz 19 kwietnia 2019 przez periedynek Obywatel (1,320 p.)
A jak zrobić by zwracało to wlasnie slownik w takiej postaci?

No właśnie nie do końca wiem jak to zrobić. Dodam te wszystkei obiekty moze do listy jakoś i jak ktos wpisze np. numer 30 to bedzie szukalo tego obiektu i pobierało cenę, a takżę odejmowało ilość. Co myślisz, jakbyś to rozegrał?

Podobne pytania

+1 głos
1 odpowiedź 468 wizyt
pytanie zadane 27 lutego 2020 w Python przez Steady Obywatel (1,140 p.)
+1 głos
1 odpowiedź 272 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,370 p.)
+1 głos
1 odpowiedź 184 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...