我正在学习Python的OOP,我正在制作一个有5个骰子的游戏。我用Dado
对象来表示我的骰子,用GeraDado
对象来创建Dado
对象。如果我创建一个对象,比如d1 = GeraDado()
,我可以使用d1.valor()
方法打印它的值,但是如果我试图将它的值附加到列表或字典中,它会返回None
。如果我做print(d1)
,它返回对象在内存中的位置,而不是值。我怎样才能使它返回d1 = GeraDado()
值,而不是使用d1.valor()
方法,只是在屏幕上打印值?
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)
您的Dado.valor
和GeraDado.dado
方法只打印骰子的值,它们实际上不返回它,相反,使它们使用return
语句返回值:
Dado.valor
:
def valor(self):
return self.__valor
GeraDado.dado
:
def dado(self):
return self.__dado.valor()
两个小建议:
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