Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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'
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
-
"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š
-
myvar = self.myvar # aktualne int
-
>>> print type(self.myvar)
-
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
-
členská
-
členská
Díky, a jaký je správný anglický výraz pro členskou proměnnou ?
-
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).
-
https://en.wikipedia.org/wiki/Member_variable
-
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ě.
-
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á!
-
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.
-
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.
-
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...
-
"staticky clen" a "atribut tridy" jsou samozrejme totez...
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
-
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...
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éž.
-
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.
-
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é.
-
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.
-
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.
-
"staticky clen" a "atribut tridy" jsou samozrejme totez...
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 ...)
-
Co jsem říkal.
Takže ještě ty setry a getry ...