I'm studying OOP in Python and I'm making a game with 5 dices. I made the Dado
object to represent my dices and the GeraDado
object to actually create the Dado
object. If I create an object such as d1 = GeraDado()
I can print its value using the d1.valor()
method but if I try to append its value to a list or dictionary it returns None
. If I do print(d1)
it returns the object's location in memmory and not the value. How can I make it return the d1 = GeraDado()
value instead of using the d1.valor()
method, that just prints the value on screen?
from random import randint
class Dado:
def __init__(self, valor):
self.__valor = valor
def valor(self):
print(self.__valor)
class GeraDado:
def __init__(self):
self.__dado = Dado(randint(1,6))
def dado(self):
self.__dado.valor()
d1 = GeraDado()
print(d1)
CodePudding user response:
Your Dado.valor
and GeraDado.dado
methods only print the value of the die, they don't actually return it, instead, make them return the value using the return
statement:
Dado.valor
:
def valor(self):
return self.__valor
GeraDado.dado
:
def dado(self):
return self.__dado.valor()
CodePudding user response:
Two little suggestions:
class Dado:
# ...
def valor(self):
return self.__valor
# 1. return stuff!
# Don't fall in love with print. It's just a debugging side-effect
class GeraDado:
# ...
def dado(self):
return self.__dado.valor() # 1. again: return!
# 2. implement a __str__ method.
# This is your class's representation that is used by print
def __str__(self):
return str(self.dado())
>>> d1 = GeraDado()
>>> print(d1)
1