Portál AbcLinuxu, 6. května 2025 00:52
Python je dost podobny jave, preto mne ako javistovi nieco spravit v pythone nerobi az taky problem. Len na objektove rysy pythonu si niekedy zanadavam.Můžeš to trochu rozvést? Nejlépe ukázat příklad, kde je Java podobná Pythonu? Případně, které objektové rysy Pythonu ti vadí.
1) riadenie prístupu k metódam a atribútom. private(__x) ostatne public.
nejake jemnejšie riadenie prístupu je proste v pytone problém
zoznam atribútov je v pythone nejaký slovník, do ktrého sa dá pridávať aj za behu
x = mojatrieda()
x.atribut = 3
x.atrtbut = 7
Čo je niekedy dosť blbé pri preklepoch.
2) preťažovanie metód - proste podľa typu argumentov je problém preťažovať. Všetky tutorály to potom riešili cez pridané vetvenia pomocou if a zisťovanie triedy objektov pomocou RTTI.
3) všetky metódy aj atribúty sa dajú používať v statickom kontexte. čo môže tiež viesť k srandovným chybám.
4)polymorfizmus - počul som, že aj v pythone ide využívať, len som doposiaľ na to neprišiel, ako.
Niečo na spôsob v jave:
Jidlo zvanec = Kobliha("s marmeládou");
Možno niektoré veci vyplývajú len z mojej neznalosti, ale musím podotknúť, že mám rád aj javu aj python. Aj spomínaný jython - keď mám možnosť za cenu rýchlosti používať v pzthone java api.
Inak, čo majú spoločné ? Oba sú to objektovo orientované jazyky. Keď si človek odmyslí niektoré kľučové slová z javoského kódu, pridá niektoré iné "fajnovosti" dostane pythonovský kód. Keď sa v jave používajú kolekcie, je to ako s pythonovskými listami a slovníkmi. Python nie je staticky typovaný. Oba jazyky su inšpirované rovnakými predchodcami. Javu kompilije človek do bytekodu pred spustením aplikácie, python sa kompiluje za chodu(alebo aspon po spusteni).
Proste, môže to byť len zdanie, ale python sa mi javí byť menej ukecanou trochu drevenejšou javou. Je to podľa mňa veľmi dobrý jazyk na prototypovanie javovských aplikácií. Javu som požíval zatiaľ štyri semestre v škole. Python sa učím doma na kolene.
Stačí takéto vysvetlenie ?1) riadenie prístupu k metódam a atribútom. private(__x) ostatne public.Tohle mě taky napadlo. Je fakt, že se mi to moc nelíbí. Třeba v Smalltalku je tohle vyřešené moc hezky. Zde se třeba Java se svými getXXX/setXXX vůbec nechytá a žádné properties se asi nechystají.
x = mojatrieda()No a to je důvod, proč obecně nemá cenu psát v dynamických jazycích nějaký kód, bez psaní testů
x.atribut = 3
x.atrtbut = 7
#setter def __setattr__(self, name, value): if not name in self.nejaky_seznam_atributu: raise AttributeException exec('self.__dict__[%s] = %s' % (name, value)) #getter def __getattr__(self, name): if not name in self.nejaky_seznam_atributu: raise AttributeException exec('return self.__dict__[%s]' % (name,))Komu se nelíbí podtržítka, nemůže mít rád Python
2) preťažovanie metód - proste podľa typu argumentov je problém preťažovať. Všetky tutorály to potom riešili cez pridané vetvenia pomocou if a zisťovanie triedy objektov pomocou RTTI.Ono to totiž podle typu nejde. Protože je to dynamicky typovaný jazyk, takže se bez ručního větvení člověk neobejde. Jenže v Pythonu se preferuje duck typing a pokud člověk musí zjišťovat instance, tak buďto píše nějaký wrapper, anebo spíš myslí pořád staticky.
3) všetky metódy aj atribúty sa dajú používať v statickom kontexte. čo môže tiež viesť k srandovným chybám.Opět, podle mého názoru se v dynamických jazycích bez unittestů nedá vážně programovat. Ovšem tohle je spíše důsledek toho, že je samotná třída objekt. Ne nadarmo Smalltalkeři vytvořili SUnit.
Jidlo zvanec = Kobliha("s marmeládou");
Tento kód nedává v dynamicky typovaných jazycích smysl, protože v nich jsou typové informace implicitní. Jsou součástí reference a nedají se změnit. Ovšem právě proto jsou objekty polymorfní už z principu, protože to, co je podstatné jsou metody (zprávy) a ne typy. V terminologii Javy, každá metoda implementuje vlastní rozhraní (otřesná představa) Keď sa v jave používajú kolekcie, je to ako s pythonovskými listami a slovníkmi. Python nie je staticky typovaný. Oba jazyky su inšpirované rovnakými predchodcami. Javu kompilije človek do bytekodu pred spustením aplikácie, python sa kompiluje za chodu(alebo aspon po spusteni).Až na to, že v Javě si nemůžu obsah pole, nebo seznamu deklarovat staticky
a, b = nejaka_funkce()
je paráda. Myslím, že Python není inspirován C++ jako Java, spíš C. Jeho kořeny jsou spíše v Module. A oddělení java
a javac
mi osobně dost vadí, protože také neposkytuje žádný exec
Stačí takéto vysvetlenie ?OK, díky
Napsal jsem to blbě. Třídní proměnné jsou ve Smalltalku vždy private, zatímco selektory zpráv (něco jako metody) jsou vždy public.1) riadenie prístupu k metódam a atribútom. private(__x) ostatne public.Tohle mě taky napadlo. Je fakt, že se mi to moc nelíbí. Třeba v Smalltalku je tohle vyřešené moc hezky. Zde se třeba Java se svými getXXX/setXXX vůbec nechytá a žádné properties se asi nechystají.
So smalltalkom (najobjektovejším jazykom na svete) ...Jistí lidé tvrdí, že to je self
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.