Ik heb al drie methodes geïntroduceerd, namelijk __init__()
,
__repr__()
, en __str__()
. Dit zijn voorgedefinieerde methodes die
iedere class heeft. Omdat ze door de ontwikkelaars van Python
gedefinieerd zijn, hebben ze excentrieke namen die beginnen en eindigen
met een dubbele underscore. Er zijn nog meer van zulke methodes, die ik
in latere hoofdstukken aan de orde laat komen.
Je kunt ook je eigen methodes definiëren voor een class. Zulke methodes
krijgen namen die lijken op de namen van functies, en die dezelfde
conventies volgen: ze beginnen met een kleine letter, en als er meerdere
woorden zijn, hebben ze underscores tussen of hoofdletters voor de
eerste letter van ieder tweede en volgende woord. De prefix is
wordt
gebruikt voor methodes die een True
/False
statement maken over een
object, de prefix get
wordt gebruikt om een waarde uit een object te
krijgen, en de prefix set
wordt gebruikt om een waarde in een object
te zetten.
Bijvoorbeeld, voor een punt kan ik de methode afstand_tot_oorsprong()
creëren, die berekent hoe ver het punt afligt van het punt (0,0).
from math import sqrt
class Punt:
def __init__( self, x=0.0, y=0.0 ):
self.x = x
self.y = y
def __repr__( self ):
return "({}, {})".format( self.x, self.y )
def afstand_tot_oorsprong( self ):
return sqrt( self.x*self.x + self.y*self.y )
p = Punt( 3.5, 5.0 )
print( p.afstand_tot_oorsprong() )
Je kunt ook methodes maken die een object wijzigen. Bijvoorbeeld, een
“translatie” van een punt is een verschuiving van een punt langs een
vector, dat wil zeggen, over een bepaalde afstand in horizontale en een
bepaalde afstand in verticale richting. De methode translatie()
krijgt
twee argumenten (naast self
, uiteraard), die de horizontale en
verticale verschuivingen vastleggen.
from math import sqrt
class Punt:
def __init__( self, x=0.0, y=0.0 ):
self.x = x
self.y = y
def __repr__( self ):
return "({}, {})".format( self.x, self.y )
def translatie( self, shift_x, shift_y ):
self.x += shift_x
self.y += shift_y
p = Punt( 3.5, 5.0 )
p.translatie( -3, 7 )
print( p )
Zoals je ziet heb ik geen retourwaarde voor translatie()
gedefinieerd
(die had ik niet nodig), maar de translatie()
methode wijzigt de
coördinaten van het punt, en effectueert daarbij de translatie actie.
Breid de class Punt
uit met een methode die een punt wijzigt in het
spiegelpunt ten opzichte van de oorsprong, dat wil zeggen, inverteer de
tekens van de coördinaten, bijvoorbeeld: (3,4) wordt (-3,-4) en (-1,2)
wordt (1,-2).