Klasė ir objektas

Jų skirtumas yra gan aiškus, tačiau labai dažnai painiojamas ir nesuprantamas naujokų.

Klasė - šablonas, taisyklių rinkinys aprašantis Objektą

Objektas - duomenų struktūra sukurta pagal Klasėsaprašymą.

Pavyzdžiui, jeigu turime klasę Asmuo:

class Asmuo(string vardas, int amžius)

Tai ji mums nusako, jog kiekvienas asmuo turės vardą ir amžių, bet tai yra abstraktu, šablonas kitaip sakant. Konkretūs asmenys gali būti:

a = Asmuo("Onutė", 20)
b = Asmuo("Jonas", 14)
...

Šie konkretūs asmenys ir yra objektai

pradmenys klasė objektas


SpriteSheet generavimas

Taigi susidūriau su viena, gan dažna problema: reikia vadinamo sprite sheet'o, o gavau krūvą paveikslėlių. Kas yra sprite sheet? į vieną paveikslėlį sutalpinta krūva kitų paveikslėlių (dažniausiai pagal kažkokią prasmę).

Sprendimas ganėtinai paprastas, taigi pasidalinsiu.

Pirmas žingsnis - įsirašyti Pillow biblioteką:

pip install pillow

Dabar mes jau galime užkrauti paveikslėlį ir jį peržiūrėti:

from PIL import Image

def load_img(src):
    return Image.open(src)

img = load_img("img/test.png")
img.show()

Taip pat lengvai galime ...

žaidimai python generavimas generatorius paveikslėliai


Paprasto puslapio sukūrimas

Taigi, šį kartą pabūsiu šiknius, ir pareklamuosiu savo kuriamą frameworką :) Tikiuosi už tai nieks nepyks.

Reikalavimai

  • Python 3.4+ versija
  • pip

Pasiruošimas

Instaliuojame wutu: pip install wutu

Sukuriame bazinį htmlfailą:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    Hello, world!
</body>
</html>

WebServeris

Na va, pagaliau galim pradėti kodinti. Pirmas žingsnis - paleisti servuką:

from wutu import Wutu

app = Wutu(index="index ...

pradmenys python wutu web


Paprasta userio teisių tikrinimo sistema - Python Decorator

Šis straipsnis pusiau skirtas supažindinti su galingu Pythonkalbos įrankiu vadinamu decorator, tuo pačiu parodyt vieną naudingą dizaino sprendimą.

Pradedam palengva - susikuriam primityvią vartotojo klasę, kuri viso labo sugeba pasakyti ar tai administratorius

class User(object):
    admin = false

    def is_admin(self):
        return self.admin

Toliau sukuriame įsivaizduojamą servisą

class Service(object):
    session = User()

    def home(self):
        return "Hello!"

    def restricted(self):
        return "Only admin should be here. Please go away"

Kaip matome, į vieną metodą ...

python decorator


Iteratorius vs Generatorius

Kiekvienas generatorius yra iteratorius, bet ne kiekvienas iteratorius yra generatorius.

Iteratorius - objektas, kuris mums gražina reikšmes tol, kol seka išsenka (pasibaigia)

Generatorius - objektas, kuris ne tik gražina, bet ir kuria naujas reikšmes.

Iš vartotojo pusės tai yra vienas ir tas pats, dėl to dažnai šios sąvokos naudojamos (ir aš tai darau) kaip sinonimai,tačiau sąvokos išsiskiria kai pradedama kalbėti apie begalines sekas, tokią seką gali kurti tik generatorius.

pradmenys iteratorius generatorius


Dockeris

Kas tai?

Sparčiai populiarėjanti technologija, taigi vis dažniau tenka girdėti šitą buzzword'ądarbo vietoje, ar draugų tarpe, bet kas per velnias tai yra? Jeigu teko dirbti su virtualiom mašinom, vadinasi su dalim to teko susidurti.

Dockeris spręndžia šias problemas:

  • "Veikia ant mano kompo" - Jūs sukuriate virtualią aplinką nurodydami konkrečias programas, jų versijas ir garantuojate, kad atitinkant visas šias griežtas sąlygas - viskas veiks. Projekto paleidimas gali būti gan sudėtingas, bet šitaip bent jau yra instrukcija ...

pradmenys unix docker


Simboliniai linkai

Ypač naudinga, tačiau dažnai nežinoma komanda. Komandos paskirtis - sukurti nuorodą į tą patį failą (arba folderį) keliose vietose. Visas grožis tame, kad vienoje vietoje keičiant - keičiasi visose t.y. visados keiti tą patį failą.

ln -s <originalas> <nuoroda>

Reikia įsidemėti kad reikia nurodyti absoliutinius kelius pvz. /usr/local/bin/... (Jeigu jis būtent ten randasi). Dažnai susiduriu su klaida, kai nurodau kelią nuo dabartinės savo direktorijos iki failo. Tokiu atveju symlinksusikuria, bet jis neveikia taip ...

pradmenys unix symlink


Žodžių išrinkimas iš teksto

Reiktų pradėti nuo to, kad ši problema nėra lengvai išspręndžiama, nėra jokio tikslaus algoritmo kuris tai atliktų. Tačiau yra gan neblogų bandymų :)

Pirmas žingsnis - skaldyti tekstą per tarpus

def get_words(raw):
    return raw.split(" ")

Duodam "Labas rytas", rezultatas => ['labas', 'rytas']. Puiku! Atrodo, kad nieko daugiau daryti nebereikia :) Bet pabandome kiek įdomesnį variantą: "Labas rytas, gerbiamas prof.!" ir gauname => ['labas', 'rytas,', 'gerbiamas', 'prof.!'].

Pašalinti šiems pertekliniams simboliams naudojamas metodas strip (kitose kalbose dažnai vadinamas ...

pradmenys python nlp


Bruteforce

Tema labai mėgstama "jaunųjų hackerių", nes kažkada buvo galima, ir teoriškai dabar įmanoma, nulaužinėti slaptažodžius šiuo būdu. Gal naudos ne tiek ir daug, bet technika vertinga išmokti, nes tą galima pritaikyti ir kitose užduotyse :)

Pirmas žingsnis - susigeneruoti simbolių seką

symbols = list(map(chr, range(32, 127)))

Turbūt suprasti šioje eilutėje kažką yra gan sudėtinga, bet iš tiesų čia atliekama labai paprasta operacija

  • Pasižiūrime į simbolių lentelę čia.

  • Pasakome, kad norime simbolių tarp 32 ir 126 ...

python apsauga generavimas bruteforce


Permainos

Taigi pribrendo metas šiokioms tokioms permainoms. Senasis puslapis, pripažinsiu, šiek tiek "užtrunyjo" :) teksto formatavimo sistema keitėsi kelis kartus, taigi bandant palaikyti viską - normaliai neveikė niekas, o ir pačiam gyvenime atsirado kiek kiti prioritetai. Po gėdingai ilgo laikotarpio (Kuris, jeigu neklystu, apie 5 metai), nuspręndžiau viską perkelti ant kiek gudresnio frameworkobei dalį straipsnių (peržvelgęs, ar jie vis dar vertingi) ketinu ilgainiui sukelti čia. Senasis puslapis vis dar pasiekiamas linku: old.crit.lt.

Norintys prisidėti prie ...

naujas puslapis pasikeitimai