Portál AbcLinuxu, 4. května 2025 18:34
Narážel na to, že komentátor v Quake3Arena hlásí: "two frags left, one frag left". Máš to přesně tak napsaný.
Jestli někdo ví, co se řve v QIII, tak jsem to já. Proto to tam mám napsaný.
Ale je to třeba i v Nexuizu.
PS: You are tied for the lead.
Jinak - Python všichni umíme, přejděme k věciPython všichni umíme? O tom ani nevím.
...a taky se nemusí kompilovat (pro to určitě existuje výraz, ale zrovna mě nenapadá)...interpretovaný
... python pyconfig.py >> config.h lwc seg-malloc.c+ > cdir/seg-malloc.c /bin/sh: lwc: command not found make[1]: *** [cdir/seg-malloc.c] Error 127 make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm' make: *** [all] Error 2a ani s pomocí Google nedám dohromady kde to sakra seženu.
PATH=$PATH:~/bin
a znova make
, je tu ale další chyba...
gcc -c -O3 -Wall -Wno-parentheses cdir/IO.c -o objdir/IO.o cdir/IO.c:28: error: conflicting types for 'malloc' cdir/IO.c:28: error: conflicting types for 'malloc' make[1]: *** [objdir/IO.o] Error 1 make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm' make: *** [all] Error 2Nějak mi to není přáno... Každopádně tam píšou, že je to otestovaný jen na x86 (asi 32bit) a že pokud to chci kompilovat na jiné architektuře, mám raději počkat na další verze...
>>> import py_compile >>> compile('test.py') Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: compile() takes at least 3 arguments (1 given) >>> compile('test.py, test.pyc') Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: compile() takes at least 3 arguments (1 given):/ podle manuálu by měl stačit jeden argument... Jde mi z toho hlava kolem.
py_compile.compile()
. Viď dokumentácia k modulom.
from py_compile import compile compile('/home/david/devel/python/test.py')Takhle je to lepší.
#! /usr/bin/env python # -*- coding: UTF-8 -*- import sys, py_compile py_compile.compile(sys.argv[1])a pro adresář:
#! /usr/bin/env python # -*- coding: UTF-8 -*- import sys, compileall compileall.compile_dir(sys.argv[1], 1)To jen kdyby to tu někdo hledal.
__init__()
nie je nič iné ako konštruktor.
Nevytvari sice objekt ve smyslu alokace pameti Narozdil od metody __new__(), ze? Neni tedy spis konstruktor toto? A dostavame se opet k tomu, co jsem rikal. Hledat analogii u oop jazyku implementovanych jinak je silne zavadejici a vede k chybnemu chapani, proto je nevhodne.Milý pane, ste trochu vedľa. Konštruktorom sa v OOP (nie len v Jave, C#, ale v OOP všeobecne) chápe funkcia, ktorá inicializuje objekt ako taký, nestará sa o nízkoúrovňové procesy. Vytvorením objektu sa potom chápe jeho vytvorenie v pamäti (new) a inicializácia (init). Ešte raz to zopakujem, jediný rozdiel oproti Jave je syntaktický: v Pythone napíšeme
= Class();
a v Jave = new Class()
, ale v oboch jazykoch vedú tieto výrazy k rovnakému procesu.
A k akému chybnému chápaniu vedie pomenovať funkciu ktorá sa stará o inicializáciu objektu? Jediné chybné chápanie, ktoré som si všimol je vaše, ale pramení zjavne z toho, že neviete, čo to konštruktor je. A to ma dosť zaráža.
Samozrejme, že v čistom OOP existujú len správy, ale Python nie je čistý OOP jazyk.
Konkrétne, pozrite si tento článok. Podstata je, že v staticky typovaných jazykoch exituje len jeden spôsob vytvorenia objektu: volaním konštruktoru, kdežto v čistých OOP stačí poslať triede (ešte nevytvorenému objektu) ľubovoľnú správu a objekt sa vytvorí popritom. AFAIK v pythone niečo takéto nie je možné, ale musí sa najprv objekt vytvoriť a až potom môžeme volať niektorú jeho metódu, i.e.:
ob = Object()
ob.show()
ale nie
ob = Object.show()
a teda v tomto ohľade je pythone takmer rovnaký ako Java, C#. Rovnako sa pritom volá konštruktor (opäť v mojom chápaní) objektu lenže v pythone sa nazýva __init__
a nie Object()
.
def x(a, b): return a+b print x(1, 2)LZE! pokud mam napriklad funkci, ktera jako parametr ocekava funkci, tak tam misto toho muzu klidne soupnout tridu. Oboji jsou to volatelne objekty a je mozne je zamenovat. Vyborne, tak si to predvedeme prakticky, treba se naucim neco noveho:
def cmpfun(a, b): if a>b: return 1 if b>a: return -1 return 0 print [1,5,9,7,5,3].sort(cmpfun)Metoda sort jako parametr ocekava funkci. Predavam funkci cmpfun, prosim o jeji nahrazeni tridou. metoda __new__ je mnohem nizkourovnovejsi nez __init__. je to spis takovej hack. Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny
########################################## def x(a, b): return a+b print x(1, 2) >>> class x: ... def __init__(self, a, b): ... self.c = a+b ... def __str__(self): ... return str(self.c) ... >>> print x(1, 2) 3 # i kdyz pri jinych prilezitostech by bylo potreba napr. # doplnit metodu __int__ a podobne, # ale o to v OOP v pojeti pythonu jde. muzete objekty # zamenovat. pokud rozumi pozadovanym zpravam... ########################################## >>> def cmpfun(a, b): ... if a>b: return 1 ... if b>a: return -1 ... return 0 ... >>> print [1,5,9,7,5,3].sort(cmpfun) None # predpokladam ze jste si jen neuvedomil, ze metoda sort # pracuje s puvodnim polem a myslel jste toto: # a = [1,5,9,7,5,3] # a.sort(cmpfun) # print a ###################################################### >>> class cmpfun(int): ... def __new__(cls, a = 0, b = 0): ... if a > b: return int.__new__(cls, 1) ... if a < b: return int.__new__(cls, -1) ... return int.__new__(cls, 0) ... >>> a = [1,5,9,7,5,3] >>> a.sort(cmpfun) >>> print a [1, 3, 5, 5, 7, 9] >>> ##########################################################takze sem prave prokazal, ze funkce a tridy jsou zamenitelny.... mam pocit, ze OOP v pythonu (a podobnych jazycich, napr. smalltalk) prilis nerozumite. Nikoho toti nezajima, ze se jedna o uplne jiny objekt, kdyz shodne reaguje na stejne zpravy.... > Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny
class A { public: int x; }; class B { public: float y; }; void f() { A* a; B* b; *a = *b; // nemozne a = (A*)b; // mozne bez jakekoli kontroly typu. // proste se nastavi ukazatel na adresu // b (obcas se to ale hodi ;)) }
print
vola metodu __str__
jak u puvodniho intu, tak i u myho objektu. takze jsou zamenitelny (v tomhle pripade)
> Stale stojim o vysvetleni toho, proc se domnivate, ze si python pletu se statickymi jazyky, i kdyz uz zacinam tusit, ze jde o nedorozumneni a ze je to kvuli tomu, ze si pod tvrzenim, ze funkce a tridy nejsou zamenitelne predstavujem kazdy neco jineho.
asi jsem se unahlil. byl to jenom takovej dojem. Kdyz sem videl jak se snazite funkce a tridy oddelovat, vzpomel sem si na Javu a kolik ma vzdycky reci QMainWindow()
v pythone neexistuje.
QMainWindow()
v skutočnosti vytvorí nový objekt typu QMainWindow
a odkaz naňho potom odovzdá ako prvý argument funkcii QMainWindow.__init__()
– takže analógiu môžeme vidieť skôr s týmto kódom Javy (C++):win = new QMainWindow();
To len aby sme zatiaľ dali veci na pravú mieru. Určite sa aj k tejto problematike autor neskôr vyjadrí.
Inak fajn článok, držím palec Díky, už asi měsíc se chystám s PyQt začít, ale nebylo dost času. Teď jsem rád, že jsem počkal
python-qt
.
Skvely serial, chtel jsem se ucit PyQt ale zatim jsem se k tomu nejak nedostal az ted . Uz jsem pridal na nej odkaz na PyCZ Wiki.
Jeste se chci zeptat: kolik dilu planujete? Co vsechno hodlate probrat?
Tak kolik dilu to nakonec bude nevim, ale ma idea je takova, ze tak do tretiho dilu bych se chtel u QT dostat k prvkum button, lineEdit, TextLabel. Samozrejme je vysvetleni signalu a slotu trosku do hloubky. V Pythonu se do tretiho dilu vysvetli tvorba vlastnich funkci a snad i trid, textovy vstup, podminky, cykly a mozna zvladnem jeste pokrocilou praci s poli :) Od tretiho dilu bych chtel, aby byla vysledkem kazdeho dilu nejaka pouzitelna aplikace. No a pri tvorbe te aplikace si pak vysvetlime nove prvky, ktere jsme pouzili. Nezavazuju se, ze tohle schema dodrzim , ale pokud to bude mozne, chtel bych, aby bylo takove.
Moc vsem dekuji za podporu . Hodne me potesila reakce na clanek
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.