Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Joky 14. 07. 2015, 10:33:48

Název: Python - Objasnění typu proměnné
Přispěvatel: Joky 14. 07. 2015, 10:33:48
Ahoj, spustím class 'foo', parametrem předám do funkce 'bar' proměnnou 'self', ve funkci 'bar' nastavím 'myvar = self.myvar'
Kód: [Vybrat]
def bar(self):
   myvar = self.myvar

class foo(object):
   myvar = 1
   def__init__(self):
      bar(self)

foo()

Nastavil jsem lokální proměnnou 'myvar', jejíchž obsah jsem získal z proměnné která je prosím jakého typu ?
myvar = self.myvar # Dosaďte správný komentář

Děkuji za pomoc
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: poustevnik 14. 07. 2015, 10:46:13
"myvar" nastavuješ na "1" takže potom, jestliže je setována z té funkce "bar", tak je typu "int"

jinak python je dynamicky typovaný jazyk, proměnná může postupně nabývat hodnoty různých typů podle toho co jí setneš
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: aaa 14. 07. 2015, 10:51:24
myvar = self.myvar # aktualne int
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: holly 14. 07. 2015, 10:53:29
>>> print type(self.myvar)
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Joky 14. 07. 2015, 10:53:39
Jasně, to jo, díky.. Já se ale ptal na něco jiného, položil jsem dotaz blbě, sorry :-( Zeptám se jinak.
Když 'myvar' je lokální proměnná a self.myvar není ani lokální ani globální, jaká tedy je ? Díky
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: rooobertek 14. 07. 2015, 10:57:08
členská
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Joky 14. 07. 2015, 11:01:54
členská
Díky, a jaký je správný anglický výraz pro členskou proměnnou ?
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: JS 14. 07. 2015, 11:02:46
Když 'myvar' je lokální proměnná a self.myvar není ani lokální ani globální, jaká tedy je ? Díky

Ne ze by na pojmenovani prilis zalezelo, ale v takovem pripade je to atribut tridy (nikoli ovsem instance!). Nekdy se jim rika staticke cleny, ale to neni idealni pojmenovani (v dynamicky typovanem jazyce).
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: T 14. 07. 2015, 11:42:39
https://en.wikipedia.org/wiki/Member_variable
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Jann 14. 07. 2015, 11:58:41
Když 'myvar' je lokální proměnná a self.myvar není ani lokální ani globální, jaká tedy je ? Díky

Ne ze by na pojmenovani prilis zalezelo, ale v takovem pripade je to atribut tridy (nikoli ovsem instance!). Nekdy se jim rika staticke cleny, ale to neni idealni pojmenovani (v dynamicky typovanem jazyce).

Označení „statický člen” je IMHO javismus, vůbec bych to nepoužíval, ani v Javě.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: podlesh 14. 07. 2015, 18:23:49
Ne ze by na pojmenovani prilis zalezelo, ale v takovem pripade je to atribut tridy (nikoli ovsem instance!). Nekdy se jim rika staticke cleny, ale to neni idealni pojmenovani (v dynamicky typovanem jazyce).

Označení „statický člen” je IMHO javismus, vůbec bych to nepoužíval, ani v Javě.
Omlouvám se za off-topic, ale tady pozor: "statický člen" a "atribut třídy" jsou dvě VELMI odlišné věci a je potřeba pamatovat na to, že Java atributy třídy nemá!
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: JS 14. 07. 2015, 22:33:20
Omlouvám se za off-topic, ale tady pozor: "statický člen" a "atribut třídy" jsou dvě VELMI odlišné věci a je potřeba pamatovat na to, že Java atributy třídy nemá!

Nechci se hadat, ale myslim, ze je to hloupost (a pro jistotu jsem jsem ted precetl 3 posty na SO na toto tema). Ty nazvy evidentne nemaji pevne definice, takze kategoricky tvrdit, ze jsou zcela odlisne je prehnane. Ano, atribut v Jave je neco trochu jineho nez atribut v Pythonu, nicmene myslim, ze to pouzivani v Pythonu predchazelo.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: JS 14. 07. 2015, 22:38:44
Označení „statický člen” je IMHO javismus, vůbec bych to nepoužíval, ani v Javě.

(Lidi naucte se trochu psat; jeden tu tvrdi, ze se neco nema pouzivat, ale aspon mohl napsat, co se tedy pouzivat ma misto toho, dalsi zase pise, ze se neco lisi ale uz nenapise proc si to mysli.)

Takze, co bys misto toho pouzival? To "staticky", jak predpokladam vis, pochazi od klicoveho slova static, ktere pochazi z C. Nejsem si jisty, zda je to tedy skutecne "javismus" (mozna to ma i C++, ted z hlavy nevim) a pripada mi to jako vhodny nazev.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: opera 14. 07. 2015, 23:12:22
Ne ze by na pojmenovani prilis zalezelo, ale v takovem pripade je to atribut tridy (nikoli ovsem instance!). Nekdy se jim rika staticke cleny, ale to neni idealni pojmenovani (v dynamicky typovanem jazyce).

Označení „statický člen” je IMHO javismus, vůbec bych to nepoužíval, ani v Javě.
Omlouvám se za off-topic, ale tady pozor: "statický člen" a "atribut třídy" jsou dvě VELMI odlišné věci a je potřeba pamatovat na to, že Java atributy třídy nemá!

"staticky clen" a "atribut tridy" jsou samozrejme totez...
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Mirek Prýmek 15. 07. 2015, 08:01:36
"staticky clen" a "atribut tridy" jsou samozrejme totez...
Citace
In some languages, class variables and class methods are either statically resolved, not via dynamic dispatch, or their memory statically allocated at compile time (once for the entire class, as static variables), not dynamically allocated at run time (at every instantiation of an object). In other cases, however, either or both of these are dynamic. For example, if classes can be dynamically defined (at run time), class variables of these classes are allocated dynamically when the class is defined, and in some languages class methods are also dispatched dynamically.

Thus in some languages, static member variable or static member function are used synonymously with or in place of "class variable" or "class function", but these are not synonymous across languages. These terms are commonly used in Java, C#, and C++, where class variables and class methods are declared with the static keyword, and referred to as static member variables or static member functions.
https://en.wikipedia.org/wiki/Class_variable
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Jann 15. 07. 2015, 10:32:20
Označení „statický člen” je IMHO javismus, vůbec bych to nepoužíval, ani v Javě.

(Lidi naucte se trochu psat; jeden tu tvrdi, ze se neco nema pouzivat, ale aspon mohl napsat, co se tedy pouzivat ma misto toho, dalsi zase pise, ze se neco lisi ale uz nenapise proc si to mysli.)

Takze, co bys misto toho pouzival? To "staticky", jak predpokladam vis, pochazi od klicoveho slova static, ktere pochazi z C. Nejsem si jisty, zda je to tedy skutecne "javismus" (mozna to ma i C++, ted z hlavy nevim) a pripada mi to jako vhodny nazev.

Klíčové slovo static má v C++ (i v Javě) více významů a odvozovoat z něj ještě terminologii pro věci, jež už svou terminologii mají, mi nepřipadá šťastné. Navíc to ani není fakticky správné. Raději bych se držel zavedeného označení třídní/instanční nežli statický(/nestatický?) ve vztahu k členům (resp. atributům).

"staticky clen" a "atribut tridy" jsou samozrejme totez...
Citace
In some languages, class variables and class methods are either statically resolved, not via dynamic dispatch, or their memory statically allocated at compile time (once for the entire class, as static variables), not dynamically allocated at run time (at every instantiation of an object). In other cases, however, either or both of these are dynamic. For example, if classes can be dynamically defined (at run time), class variables of these classes are allocated dynamically when the class is defined, and in some languages class methods are also dispatched dynamically.

Thus in some languages, static member variable or static member function are used synonymously with or in place of "class variable" or "class function", but these are not synonymous across languages. These terms are commonly used in Java, C#, and C++, where class variables and class methods are declared with the static keyword, and referred to as static member variables or static member functions.
https://en.wikipedia.org/wiki/Class_variable

Jinými slovy, C++ a Java mrší zavedenou terminologii OOP nesmyslnými názvy. Člen a atribut nejsou úplně to samé, jelikož členem je i metoda, zatímco atribut se omezuje na datové složky. Mluvíme-li však o datových složkách, pak atribut a člen představují totéž.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Mirek Prýmek 15. 07. 2015, 10:39:12
Jinými slovy, C++ a Java mrší zavedenou terminologii OOP nesmyslnými názvy. Člen a atribut nejsou úplně to samé, jelikož členem je i metoda, zatímco atribut se omezuje na datové složky. Mluvíme-li však o datových složkách, pak atribut a člen představují totéž.
Jak to chápu já, je spíš problém nazývat statické X něco, co není známo v době překladu.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Jann 15. 07. 2015, 10:56:32
Jinými slovy, C++ a Java mrší zavedenou terminologii OOP nesmyslnými názvy. Člen a atribut nejsou úplně to samé, jelikož členem je i metoda, zatímco atribut se omezuje na datové složky. Mluvíme-li však o datových složkách, pak atribut a člen představují totéž.
Jak to chápu já, je spíš problém nazývat statické X něco, co není známo v době překladu.

To je velmi výstižné.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: JS 15. 07. 2015, 11:22:20
Klíčové slovo static má v C++ (i v Javě) více významů a odvozovoat z něj ještě terminologii pro věci, jež už svou terminologii mají, mi nepřipadá šťastné. Navíc to ani není fakticky správné. Raději bych se držel zavedeného označení třídní/instanční nežli statický(/nestatický?) ve vztahu k členům (resp. atributům).

Problem tak nejak je, ze tu terminologii mely v jine kulture (jinych programovacich jazycich). Samozrejme, bylo by fajn, kdybychom se vzdy globalne shodli na terminologii, ale realita je jina. Takze pak v praxi musis znat oba terminy, at uz se ti to libi nebo ne.

Mne osobne na pojmenovani nezalezi, takze ja k tomu co rikas mam ambivalentni postoj. Podstatne je, aby si lide rozumeli, ne jestli jde o prilehavy nazev, a myslim, ze si tady rozumime.

Jinými slovy, C++ a Java mrší zavedenou terminologii OOP nesmyslnými názvy.

Nekteri by dokonce rekli, ze C++ a Java mrsi cele OOP. :-)

Člen a atribut nejsou úplně to samé, jelikož členem je i metoda, zatímco atribut se omezuje na datové složky. Mluvíme-li však o datových složkách, pak atribut a člen představují totéž.

No, zni to hezky, ale ma to jeden maly problem. V mnoha jazycich, napriklad Pythonu, jsou funkce take hodnoty (neboli data). Tradicni staticky typovane OOP jazyky mezi tim rozlisuji (a pak se to resi pres paskvily jako delegate atd.), ale neni to univerzalni pravidlo.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: Jann 15. 07. 2015, 12:08:53
Jinými slovy, C++ a Java mrší zavedenou terminologii OOP nesmyslnými názvy.

Nekteri by dokonce rekli, ze C++ a Java mrsi cele OOP. :-)

Hlavně nejde o objektové jazyky v pravém slova smyslu (u C++ je to obzvláště markantní, jde o klasické strukturované návrhy, z nějakého nepochopitelného důvodu vecpané do struktur, totiž, ehm, pardon, do class, ale žádný benefit to nepřináší, jen je to celé méně přehledné, hůř se to udržuje a vznikají tam ještě zákeřnější chyby než v C; u Javy je to podobné, ale přeci jen už tam jistý pokrok cítit je, ačkoli o 90% programů se dá říci totéž, co o C++). Stačí si daný program napsat čistě strukturovaně a porovnat s tím „objektovým”. Ale nechci se tu pouštět do flamů.
Zrovna v jednom takovém třicetitisícřádkovém projektíku v C++ potřebuji něco změnit a jeho „objektový” návrh mi to nijak neusnadňuje, ale celé je to kvůli tomu naprosto zbytečně komplikované a nepřehledné – hierarchie tříd umělá, jen kvůli tomu, že se to tak čeká, ve skutečnosti křečovitá, nelogická, neusnadňující znovupoužitelnost kódu, ale komplikující ji, atd. Objektový návrh by vypadal naprosto diametrálně odlišně, počet řádků by byl poloviční a moje týdenní práce by se scvrkla asi tak na půl den.

Člen a atribut nejsou úplně to samé, jelikož členem je i metoda, zatímco atribut se omezuje na datové složky. Mluvíme-li však o datových složkách, pak atribut a člen představují totéž.

No, zni to hezky, ale ma to jeden maly problem. V mnoha jazycich, napriklad Pythonu, jsou funkce take hodnoty (neboli data). Tradicni staticky typovane OOP jazyky mezi tim rozlisuji (a pak se to resi pres paskvily jako delegate atd.), ale neni to univerzalni pravidlo.

Tak tedy jinak. Atribut slouží k uchovávání stavu. Ale taky nepatřím k těm, co by se vyžívali ve slovíčkaření – pokud dané označení nezačíná být až zavádějící. Statická funkce, statická proměnná – to jsou zavedené céčkovské termíny. Statický člen třídy – to je velmi nešťastný název a nešťastně recyklované klíčové slovo, protože má odlišný význam.
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: hawran diskuse 16. 07. 2015, 09:32:02
"staticky clen" a "atribut tridy" jsou samozrejme totez...
Citace
In some languages, class variables and class methods are either statically resolved, not via dynamic dispatch, or their memory statically allocated at compile time (once for the entire class, as static variables), not dynamically allocated at run time (at every instantiation of an object). In other cases, however, either or both of these are dynamic. For example, if classes can be dynamically defined (at run time), class variables of these classes are allocated dynamically when the class is defined, and in some languages class methods are also dispatched dynamically.

Thus in some languages, static member variable or static member function are used synonymously with or in place of "class variable" or "class function", but these are not synonymous across languages. These terms are commonly used in Java, C#, and C++, where class variables and class methods are declared with the static keyword, and referred to as static member variables or static member functions.
https://en.wikipedia.org/wiki/Class_variable

Šmarjá, Ty sis "dovolil" dodat definici odněkud jinud, než jen vlastní, objektivní a jediný správný názor?
To je rouhačství!!!

(stejně se to zvrhne v slovní průjem na téma java/c++/... je/není objektový, neboť blablabla ...)
Název: Re:Python - Objasnění typu proměnné
Přispěvatel: hawran diskuse 16. 07. 2015, 09:34:02
Co jsem říkal.

Takže ještě ty setry a getry ...