augusztus 2010 havi cikkek

A descriptorok

A descriptorok (leírók) szintén a kedvenc python nyelvi eszközeim közé tartoznak. Teljes boldogságban élhetünk akkor is, ha fogalmunk sincs róluk, de bizonyos helyeken meg tudja szépíteni a programunkat. A dekorátorokhoz hasonlóan nem túl bonyolult dologról van szó, ha valaki használt már Djangót, akkor jó eséllyel találkozott velük, még ha nem is tud a létezésükről.

Djangóban a model mezői általában az adatbázis mezőnek megfeleltethető python típusok:

>>> from pages.models import Page
>>> p = Page()
>>> p.creation_date
datetime.datetime(2010, 8, 31, 10, 7, 30, 909404)
>>> type(p.creation_date)
<type 'datetime.datetime'>

Általában... nézzünk csak meg azonban egy ForeignKey típusú mezőt - ha nem rendelek hozzá értéket, akkor látszik a turpisság:

>>> p.author
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/django/db/models/fields/related.py", line 288, in __get__
    raise self.field.rel.to.DoesNotExist
DoesNotExist

Hmm, milyen __get__? Nezzük csak meg jobban, mi is a author mező:

>>> p.__class__.__dict__['author']
<django.db.models.fields.related.ReverseSingleRelatedObjectDescriptor object at 0x25a9710>
>>> dir(p.__class__.__dict__['author'])
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__',
 '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'field']

És igen, megvan a tettes, aki nem egy sima mező, hanem egy descriptor, akinek már van __get__ (és esetünkben __set__) metódusa is. Na lássuk akkor mik is azok a descriptorok!

Tovább…

01szept.
5

Egy kis dekoráció

A python nyelvben a dekorátor egy "szintaktikai cukor" (szinte fáj az ilyet leírni magyarul), semmi újat nem ad a nyelvhez. A java annotációkhoz hasonló módon közvetlen a dekorálandó objektum elé helyezett, @ karakterrel kezdett kifejezés, amely például a klasszikus dekorátor tervezési minta használatához és sok más egyéb dologhoz jó. Lássuk hát mi is ez pontosan, illetve hogyan kell használni.

Tovább…

19aug.
9

Eltérő környezetek beállításainak kezelése Djangoval

Django alapú alkalmazásfejlesztésnél a settings modul hordozza a projektre jellemző konfigurációkat. Gyári kiszerelés esetén (django-admin.py startproject) ez tipikusan a settings.py fájl. Legyen bármilyen kis feladatról szó, célszerű az alkalmazás fejlesztői és éles környezetét szétválasztani. A két környezet adottságai nem szükségszerűen azonosak: eltérő adatbázis- és webkiszolgáló, más elérési útvonalak (path) sít. Hogyan lehet mégis a különböző szoftverkörnyezetek konfigurációját a settings modulban elkönyvelni?

Tovább…

17aug.
3

Python és az OOP

Ahogy már írtam, a python egy objektum orientált scriptnyelv, de nem vagyunk rákényszerítve az OOP-re, nyugodtan használhatjuk imperatív/procedurális módon, azaz kb. mintha perl- vagy shellscriptet írnánk. Nem kell main() függvény (mint C-ben), nem kell egy kvázi felesleges osztály egy public static void main(...) metódussal, szépen sorról sorra megcsinálja, amit mondunk neki.

Pár soros scriptecskénél ez hasznos tulajdonság, nagyobb projectekben viszont kerülendő.

Csak címszavakban, mi is az az objektum orientált programozás?

Tovább…

07aug.
9

A Python interpreter

Az egyik kedvenc dolgom a pythonban az az interpreter. Segítségével igen gyorsan ki lehet próbálni kódrészleteket, modulokat, sőt én számológépnek is azt szoktam használni - egy-két terminál mindig nyitva van nálam :)

Tovább…

03aug.
7