Aktywne Wpisy
Kodzirasek +7
Jak sobie oglądam te całe famemma to sobie myśle czy by nie wziąć testosteronu, bo w sumie ja to taki cichy i spokojny przy tych gościach a może jakbym wziął to bym nabrał pewności siebie?Skoro każdy tam bierze teścia to chyba musi działać.
#famemma #mirkokoksy #testosteron #sterydy #silownia
#famemma #mirkokoksy #testosteron #sterydy #silownia
1) Czy są rzeczy, których nie powinno się pisać obiektowo? Jeżeli tak, to co na to wpływa?
2) Moje wstępne(zapewne błędne) założenie jest takie, że instancja będzie zawierała 5 zmiennych, które "zbiorę" w jakiś sposób wcześniej. Tutaj pytanie, zapewne wynikające z błędnego rozumienia oop - narazie stworzyłem @classmethod z inputem roboczym ale nie wiem, jak podłączyć pod to założenia (typu opis max 255 char, kategoria 1-12 itd).
Jeśli dobrze rozumiem - metody mają umożliwiać "operacje" na obiektach, jednak, skoro mam defakto 1 obiekt (dodawanie do listy zakupów produktu jeden po drugim) to czy to wszystko ma sens? #naukaprogramowania
1. problem jest taki, że OOP jest utożsamiane z czymś więcej niż samym OOP - z całym szeregiem zasad, dobrych praktych, wzorców. Python jest specyficznym językiem, trzeba wprawy żeby wyczuć, kiedy opłaca się porzucić tradycyjne podejście OOP i projektować kod (lub jego fragment) inaczej - cała trudność w tym, że trzeba zachować te dobre praktyki z OOP
2. classmethod nie wywołujemy na instancji, tylko na klasie (przyjmuje jako pierwszy argument
new_name = input("Provide new name of your product")
product.change_name()
print(product.change_name())
tu newname powinno być parametrem (o ile jest sens pisania takiej metody) i powinno to być tak:
product.change_name(new_name)
print(product.get_name())
chociaż ja wolałbym napisać po prostu (szczególnie, że w ostatecznym kodzie tego nie będzie):
print(product.name)
Co do tego changename(), newname to jakieś takie szybkie kombinowanie z metodami w ogóle to było z mojej strony, ciągle czytam/ oglądam różne tutoriale o OOP ale jak ze
@michael93pl: Żadnego inputu, scenariusz to np.:
p1=Item('Marchew')
p2=Item('Rodkiew')
p2.change_name('Rzodkiew')
p1.save()
p2.save()
Nie wiem tylko jak tylko te inputy zebrać do formy , tak jak to zrobiłem wcześniej funkcjami ( bez oop) do:
finalproduct
__init__
?:final_product = Item(name, quantity, type, category, description)
i oczywiście oddzielaj (long z test2 będzie to łamać) pobieranie danych od obiektów, dane mogą przyjść skądkolwiek.
Każdy input musi być jednak "przemielony" przez różne warunki (tak jak w main.py jest to rozwiązane zwykłymi funkcjami - np quantity to tylko int, category
Jeśli chciałbyś się nauczyć OOP to polecam zmienić język a później dopiero wrócić do pythona. Chociaż wtedy możesz pewne rzeczy robić nie 'python way'
Mielenie, czyli walidacja powinna odbywać się w dwóch miejscach:
1. Przyjmowanie danych od użytkownika (z pliku, itd.),
2. Tworzenie obiektów (init).
w 1. dajesz ludzki komunikat,
w 2. dajesz wyjątek
to oczywiście spore uproszczenie, ale będę śledził kolejne wersję, to jeszcze coś podpowiem.
Zakładam, że zbieranie inputów z @classmethod jest poprawne, może trochę lepiej się wyrażę w ten sposób - mam ja taki początek znowu: https://pastebin.com/tBSh07J7
Czy da się "podłączyć" na poziomie klasy (metodą czy inną magią ), żeby przy inpucie np. category działo się coś takiego? https://pastebin.com/yiaihfs7
Dzięki wielkie, teraz w pracy siedzę to robię to wszystko na online
@gryzon_c: nie ma, ale są abc (Abstract Base Classes), co IMHO wystarczy. Nie ma za to wszystkich (IMHO zbędnych) obostrzeń - oraz niuansów (jak w C++).
tam masz omówione różne przypadki z diagramami uml