[Python] Opstart problemen

Pagina: 1
Acties:

  • yootje
  • Registratie: December 2002
  • Laatst online: 29-09-2025
Ik ben bezig met het leren met Python, en tot nu toe was het allemaal heel eenvoudig, tot ik bij classes terecht kom. Ik heb al veel tutorials gelezen, maar door al die termen raak ik in de war. Ik heb het volgende script gemaakt, maar ik snap er niet zoveel van:

code:
1
2
3
4
5
6
7
8
9
10
11
12
class TeKortException(Exception):
    def __init__(self, length, assumed):
        Exception.__init__(self)
        self.length = length
        self.assumed = assumed

try:
    s = raw_input('Typ eens wat, doe eens leuk. ')
    if len(s) < 3:
        raise TeKortException(len(s),3)
except TeKortException, x:
    print 'Je invoer was %d lang, het moest toch echt %d lang zijn.' % (x.length,x.assumed)


Wat vragen:

Wat doet die x in except TeKortException, x: ?
Hoe zit het nou precies met self? Ik snap nog steeds niet wat die rpecies "doet", als parameter en als begin van een variabele.
Begrijp ik het goed dat er al een "ingebouwde" class Exception is?

En nog wat over de terminologie:


code:
1
2
3
4
5
6
7
class Klasse:
    variable = 'hallowereld'
    def functie(self):
        print 'Hey!'

x = Klasse()
x.functie()


Dan is variable = 'hallowereld' een object van Klasse, specifieker een field.
functie(self) een object van klasse, specifieker een method.
x = Klasse() is een instance
Bij x.functie() is functie() een attribuut.

Klopt dit allemaal?

Ik zou erg geholpen zijn als iemand deze vragen kon beantwoorden. Alvast bedankt!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

yootje schreef op zondag 09 juli 2006 @ 19:42:
Wat vragen:

Wat doet die x in except TeKortException, x: ?
Dat is de naam van de variabele waar een eventuele exceptie aan toegekend wordt, zodat je de properties ervan kan benaderen. Die kan je zelf een zinvolle naam geven, zodat je code leesbaar blijft.
Hoe zit het nou precies met self? Ik snap nog steeds niet wat die rpecies "doet", als parameter en als begin van een variabele.
'Self' refereert aan de instantie van de klasse waarop een methode wordt aangeroepen. Wat het doet is de referentie naar het object doorgeven.
Begrijp ik het goed dat er al een "ingebouwde" class Exception is?
Ja. Die breid je uit door hem tussen de haakjes van de klassedefinitie op te geven.
Dan is variable = 'hallowereld' een object van Klasse, specifieker een field.
'variable' is in sommige programmeertalen een field of een property, maar is in Python termen volgens mij een 'attribute'.

x is een instantie van klasse Klasse. x is ook een object met het type 'Klasse'. Of soms kom je ook wel 'object instantie' als term tegen.

functie is in termen van sommige programmeertalen een methode, maar in python termen is alles (IIRC) een function. Er is geen verschil tussen functies die geen waarde retourneren en functies die wel een waarde retourneren; de laatste worden vaker methoden genoemd in andere talen.
Bij x.functie() is functie() een attribuut.
functie() is inderdaad een attribuut van klasse Klasse.

Zoals je ziet gebruik ik zelf de termen ook door elkaar; ik ben geneigd Java termen voor Python dingen te gebruiken. Uiteindelijk kan dat weinig kwaad, want je begrijpt elkaar toch wel, zolang je niet denkt dat elk woord iets moet betekenen dat fundamenteel anders is.

P.S. Puristen, fire away :P.

[ Voor 10% gewijzigd door Confusion op 09-07-2006 21:00 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Confusion schreef op zondag 09 juli 2006 @ 20:59:
functie is in termen van sommige programmeertalen een methode, maar in python termen is alles (IIRC) een function. Er is geen verschil tussen functies die geen waarde retourneren en functies die wel een waarde retourneren; de laatste worden vaker methoden genoemd in andere talen.
Met de meeste van je antwoorden ben ik het wel redelijk eens, maar ik had altijd het idee dat in veel talen het onderscheid tussen een method en een functie is of het ding al dan niet aan een object gebonden is (methode wel, functie niet). In die zin bestaat er ook een (miniem) verschil tussen methoden en functies in Python, omdat methoden hun eerste argument ontvangen op een andere manier. Vergelijk:

functie(self, bla, bier)
self.methode(bla, bier)

Rustacean


Verwijderd

Manuzhai schreef op zondag 09 juli 2006 @ 23:03:
[...]
functie(self, bla, bier)
self.methode(bla, bier)
Volgens mij is er in python dus geen onderscheid tussen deze twee. Gegeven een object o van class C, waarbij voor class C nog geen methode genaamd "functie" is gedefinieerd, dan kun je toch nog schrijven:

x.functie( bla, bier )

want x zal dan automatisch als het eerste argument van deze functie (self) worden gebruikt.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Verwijderd schreef op maandag 10 juli 2006 @ 10:43:
Volgens mij is er in python dus geen onderscheid tussen deze twee. Gegeven een object o van class C, waarbij voor class C nog geen methode genaamd "functie" is gedefinieerd, dan kun je toch nog schrijven:

x.functie( bla, bier )

want x zal dan automatisch als het eerste argument van deze functie (self) worden gebruikt.
Nou ja, er is wel een specifiek stukje code dat ervoor zorgt dat het object (voor de punt) als argument wordt meegegeven.

Rustacean


  • yootje
  • Registratie: December 2002
  • Laatst online: 29-09-2025
Hartstikke bedankt! Veel is voor mij duidelijk geworden :)
Pagina: 1