Co si myslíte o OOP?

operator

Re:Co si myslíte o OOP?
« Odpověď #1350 kdy: 25. 01. 2019, 09:04:26 »
V Pythonu?! (Ano, formálně samozřejmě ano, ale reálně na tom nikdo nic nestaví.)
Jak jsi na to prisel? Vytvareni uzivatelskych typu pomoci trid je zaklad.
Mě mučí tyhle slovokolotoče: v Pythonu se objekt vytváří pomocí slova class, a na jeho jméno se tážeme slovem type. Uff.
To je dost zavadejici tvrzeni. Pomoci class se definuje trida, coz je sice take objekt, jako vsechno v pythonu, ale neni to jedina a ani hlavní cesta jak vytvaret objekty. Objekt, ktery jsi mel pravdepodobne na mysli, se vytvari volanim te tridy, nikoliv pomoci slova class. A neni to zadny slovokolotoc, datovym typem tridy je typ type. Volanim type() se pak neptas na jmeno objektu, ale jeho datovy typ. Mas v tom desny chaos.
Citace
pouziva to chtej nechtej kazdy:
Zas nepřeháněj. Možná někdo někdy.
Neprehanim. Protoze je na tom postavena silna typova kontrola, chtej nechtej to pouziva kazdy, te se nevyhnes. I ten, kdo nepouziva v Pythonu tridy a nevytvari si vlastni uzivatelske typy. Python je flexibilni a nenuti te definovat si vlastni tridy, tedy vlastni uzivatelske typy, ale bez toho ho vyuzivas jen tak na pul. Pro male skripty fajn, tam vystacis s generickymi typy, ale pro vetsi aplikace a/nebo komplexnejsi datove struktury je to vyborna pomucka a jen trouba ji nevyuzije.

Myslel jsem, skrz tve autoritativni vyjadrovani k dynamickemu programovani a pythonu, ze se v tom vyznas lepe. Vis o tom ale uplny prd.


Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #1351 kdy: 25. 01. 2019, 09:59:10 »
Mě mučí tyhle slovokolotoče: v Pythonu se objekt vytváří pomocí slova class, a na jeho jméno se tážeme slovem type. Uff.

Na jmeno tridy se ptame pres x.__class__.__name__. Jestli je objekt instanci (pod)tridy se ptame pomoci isinstance(). type() se pro tyto ucely pouzivat nedoporucuje, rozhodne ne v Pythonu 3, kde se semantika te funkce dost zmenila.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Co si myslíte o OOP?
« Odpověď #1352 kdy: 25. 01. 2019, 10:11:56 »
Mě mučí tyhle slovokolotoče: v Pythonu se objekt vytváří pomocí slova class, a na jeho jméno se tážeme slovem type. Uff.

Na jmeno tridy se ptame pres x.__class__.__name__. Jestli je objekt instanci (pod)tridy se ptame pomoci isinstance(). type() se pro tyto ucely pouzivat nedoporucuje, rozhodne ne v Pythonu 3, kde se semantika te funkce dost zmenila.

x.__class__ je stejné jako type(x)

operator

Re:Co si myslíte o OOP?
« Odpověď #1353 kdy: 25. 01. 2019, 10:19:27 »
Mě mučí tyhle slovokolotoče: v Pythonu se objekt vytváří pomocí slova class, a na jeho jméno se tážeme slovem type. Uff.

Na jmeno tridy se ptame pres x.__class__.__name__. Jestli je objekt instanci (pod)tridy se ptame pomoci isinstance(). type() se pro tyto ucely pouzivat nedoporucuje, rozhodne ne v Pythonu 3, kde se semantika te funkce dost zmenila.
Upresnim. Funkce type(obj) vraci datovy typ promenne. Funkce isinstance(obj, cls) vraci bool a vyhodnocuje, zda obj je instanci tridy nebo jejiho potomka, cili na test typove kompatibility je to vhodnejsi funkce. V Pythonu 3 je type(obj) ekvivalentni s obj.__class__, protoze v pythonu jsou sjednoceny typy a tridy. V Pythonu 2 to tak nebylo, byly tam tridy dvojiho druhu, puvodni a tzv, new class, ktere se v Pythonu 3 staly standardnimi a univerzalni pristup k typum byl pres type() a je stale nutny u Python programu, ktere maji byt funkcni pod obema verzemi Pythonu.

Pokrocilou zajimavosti je, ze type() jde vyuzit i k definici datoveho typu bez pouziti trid. Tudiz kdyby Kadet chtel, mohl by implementovat onen priklad objektu s dicty bez class, jen by to nebylo tak prehledne.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Co si myslíte o OOP?
« Odpověď #1354 kdy: 25. 01. 2019, 10:33:29 »
Pokrocilou zajimavosti je, ze type() jde vyuzit i k definici datoveho typu bez pouziti trid. Tudiz kdyby Kadet chtel, mohl by implementovat onen priklad objektu s dicty bez class, jen by to nebylo tak prehledne.

Přesněji, type vytvoří třídu bez klíčového slova class. Slovem třída bývají označovány i datové typy obecně. Datové typy jsou objekty typu type.

Kód: [Vybrat]
A = type('A', (), {})

# je stejne

class A:
    pass


operator

Re:Co si myslíte o OOP?
« Odpověď #1355 kdy: 25. 01. 2019, 11:22:40 »
Pokrocilou zajimavosti je, ze type() jde vyuzit i k definici datoveho typu bez pouziti trid. Tudiz kdyby Kadet chtel, mohl by implementovat onen priklad objektu s dicty bez class, jen by to nebylo tak prehledne.

Přesněji, type vytvoří třídu bez klíčového slova class. Slovem třída bývají označovány i datové typy obecně. Datové typy jsou objekty typu type.

Kód: [Vybrat]
A = type('A', (), {})

# je stejne

class A:
    pass
Pravda, v Pythonun 3 uz i cislo ma datovy typ tridu int.
Kód: [Vybrat]
~ $ python
Python 3.7.2 (default, Dec 28 2018, 01:00:42)
[Clang 7.0.2 (https://android.googlesource.com/toolchain/clang 003100370607242d on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> type(0)
<class 'int'>
>>>
~ $ python2
Python 2.7.15 (default, Sep 23 2018, 14:53:40)
[GCC 4.2.1 Compatible Android (4751641 based on r328903) Clang 7.0.2 (https://a on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> type(0)
<type 'int'>
>>>