(Using Python 2.7)
Hello,
I've two version of a class PairOfDice.
1.) This one is not working and throws an error.
TypeError: 'int' object is not callable
import random
class PairOfDice:
""" Represent the Pair of Dices and have method which tells the total of those roles.
"""
def roll(self):
self.total = random.randint(1, 6) + random.randint(1, 6)
def total(self):
return self.total
def name(self, name):
self.name = name
def getName(self):
return self.name
player1 = PairOfDice()
player1.roll()
print player1.total()
2) This one is working.
import random
class PairOfDice:
""" Represent the Pair of Dices and have method which tells the total of those roles.
"""
def roll(self):
self.roll1 = random.randint(1, 6)
self.roll2 = random.randint(1, 6)
def total(self):
return self.roll1 + self.roll2
def name(self, name):
self.name = name
def getName(self):
return self.name
player1 = PairOfDice()
player1.roll()
print player1.total()
Can please someone explain what's wrong with the first one?
Thanks
In the first class
total
is a function as well as an attribute of the class. That is not okay :) Python thinks that the total you are referring to in the final line is the integer variable total and not the function.It is considered a good practice to name the function
total
asget_total
insteadThis is because you have a property called total, as well as a function called
total
. When you runroll
, you are overwriting the class's definition oftotal
.In other words, before you run
roll
,player1.total
is a function. However, once you run roll, you setplayer1.total
to be a number. From then on, when you referenceplayer1.total
, you are referring to that number.You might want to rename the
total
function to something likegetTotal
, or something similar.