-ORIENTED
MagPi54
MagPi54
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Feature<br />
automatically. It creates a separate set of dice for each of<br />
our players.<br />
The ‘self’ bit also needs explaining. Variables, like<br />
our dice = [] list are normally disposed of when a<br />
function ends (or is returned).<br />
So if we just put dice = [], the list would be created<br />
by __init__(), then immediately vanish.<br />
Python gets around this problem using the keyword<br />
‘self’. You put ‘self’ inside the parentheses of the<br />
__init__():<br />
An object’s functions are called ‘methods’, but they<br />
are created in the same way.<br />
here re ot o dierent type o method nd you<br />
can create whatever you like, but common ones are<br />
called ‘setters’ and ‘getters’.<br />
Our roll method is a ‘setter’. It sets the dice list to<br />
three random numbers.<br />
What do you think a ‘getter’ does? That’s right. It<br />
gets the variables inside the object and returns them.<br />
We have just the one getter:<br />
dene<br />
Then we use self, followed by a dot, to store the<br />
variable in this version of the object.<br />
ede<br />
You then use e in functions when you want to<br />
access or change a variable, by writing self inside the<br />
parentheses of the function. Like this:<br />
dee<br />
The concept can be mind-boggling (it’s passing a<br />
version of itself into itself). So focus on the practical<br />
steps rather than the esoteric theory of how it works:<br />
deedee<br />
enede<br />
etter nd etter eem it odd t firt. ter<br />
all, you could just reach into an object and access<br />
the variables.<br />
Well, you could, at least in Python, but this is<br />
considered a bad thing to do. One of the points of OOP<br />
is that objects contain their variables and keep them<br />
safe from other objects. So you don’t just reach inside<br />
an object and access variables.<br />
Instead, you create methods (functions) that set the<br />
variables and get them. Then you use these methods<br />
to set and get variables.<br />
ow weve reted our definition we n ue it<br />
to create objects.<br />
• Put a special function at the start of a class called<br />
__init__(self).<br />
• Put the variables you want to use inside init.<br />
• Create the variables with e, like ene<br />
or ee or ede = [].<br />
• Place self inside the parentheses of functions that<br />
need to access the variables.<br />
• Use e and the name of the variable inside<br />
the function to use it.<br />
Got that? Don’t worry too much if it seems weird.<br />
That’s the hardest part and it will get easier with practice.<br />
Now we’ve got our dice list sorted, what about the<br />
other functions?<br />
Methods in the madness<br />
Now that our class has a list for the dice, we need<br />
to ro the die. or tht we rete more regur<br />
untion definition.<br />
Create away<br />
You create objects just as you would a variable. You<br />
use the assigns operator (=). We’re going to create two<br />
dice players:<br />
ee<br />
ee<br />
Note that e and e are not called<br />
‘variables’. They are called ‘object instances’.<br />
We access the object instance’s methods using dot<br />
notation. That is where you use the name of the object<br />
instance, followed by a dot, then the name of the<br />
method you want to use.<br />
We created a method, get_dice(), that returns<br />
the dice stored. We would access this method using<br />
dot notation, such as eede.<br />
irt we ue the roll method to get each player<br />
object to roll its dice:<br />
e<br />
e<br />
dee<br />
deenende<br />
nne<br />
edeendndn<br />
The rest of our bunco_oop.py program is really<br />
very similar to bunco_procedural.py. he dierene<br />
is that here we use the ede method in<br />
place of .<br />
72 February 2017<br />
raspberrypi.org/magpi