[ MarkoBalkan @ 24.08.2007. 20:28 ] @
jel moze netko na brzinu objasniti, sta predstavlja "def nesto" izvan klase i unutar klase i sta predstavlja kad pise def "_nesto_" i def "nesto" ?

citao sam nesto o tome, da se klase, objekti odredjuju sa tab-om ili razmakom.
[ mr.marvin @ 24.08.2007. 21:26 ] @
Da pokusam ja...

>jel moze netko na brzinu objasniti, sta predstavlja "def nesto" izvan klase i unutar klase

Ako je unutar klase, onda je dostupno samo klasi u kojoj se nalazi, i tu funkciju pozivas preko klase.

Npr:

Code:

class Ispis:
    """Jednostavan primjer ispisivanja
    teksta"""

    def __init__(self, tekst):
        "provjera teksta"

        if len(tekst)==0:
            raise "Unesite tekst on najmanje 1 karakter"
        
        self.tekst = tekst

    def ispis(self):
        "ispis teksta"
        print "Tekst ispisan pomocu klase:"
        print self.tekst


def ispis2(teks):
    "ispis teksta"
    print tekst



Ako sad napravis instancu klase:

t = Ispis("Proba ispisa iz klase.")

...i zelis da ispises tekst, moras pozvati funkciju unutar klase:

t.ispis()

...jer ce pozivanje samo ispis() prijaviti gresku.

Funkcija ispis2 je van klase i nju pozivas, logicno, direktno. Ovo ima veze sa funkcionalnim programiranjem i objektnim programiranjem, odnosno razlicitim pristupima pisanja koda.

> i sta predstavlja kad pise def "_nesto_" i def "nesto" ?

Funkcije koje su omedjene sa __ su rezervisane funkcije i imaju poseban znacaj. U gornjem primjeru je __init__ funkcija i njena jedina namjena jeste da se prva izvrsi nakon sto se kreira instanca, tj. "kopija" klase. U gornjem slucaju, __init__ provjerava da li je uneseni tekst duzi od jednog karaktera, i ukoliko nije, prijavljuje se greska. Ukoliko je sve u redu, tekst postaje javno dostupan citavoj klasi (zbog ovog self.) i moze de iskoristiti u funkciji ispis() unutar klase. Drugi primjer bi bilo __add__ koje odredjuje kako ce se klase ponasati ukoliko se "sabiraju", itd...

>citao sam nesto o tome, da se klase, objekti odredjuju sa tab-om ili razmakom.

To je konvencija Python jezika: blokovi koda se odvajaju blanko znakovima (cini mi se sa 4) i praznim linijama.

PS
O klasama u Pythonu:
http://diveintopython.org/object_oriented_framework/index.html