为什么我的Python代码运行后输出<class '__main__.Dice1'>
问题原因
- 你直接打印的是
Dice1类本身,没有创建类的实例,类直接打印默认会输出类的类型标识字符串,也就是你看到的<class '__main__.Dice1'> - 类的
__str__方法存在多处错误:- 属性名拼写错误:方法内判断的
self.dicernumber不存在,实际定义的属性是self.dicenumber __str__规范要求返回字符串对象,你在方法内直接调用print输出,没有返回值,即使实例化后打印也会输出None- 判断逻辑混用实例属性和全局变量,部分分支直接判断全局
RandomDice1,不符合类封装的逻辑,也没法支持同时生成两个骰子的图案
- 属性名拼写错误:方法内判断的
__init__方法的参数没有被使用,你直接把属性赋值为全局的RandomDice1,无法灵活传入不同骰子的点数生成对应图案
修正方案
首先调整类的逻辑,规范__str__方法,然后实例化类对象再打印,修正后的完整代码如下:
import random class Dice: def __init__(self, point): self.point = point def __str__(self): if self.point == 6: return " ------\n| o o |\n| o o |\n| o o |\n ------" elif self.point == 5: return " ------\n| o o |\n| o |\n| o o |\n ------" elif self.point == 4: return " ------\n| o o |\n| |\n| o o |\n ------" elif self.point == 3: return " ------\n| o |\n| o |\n| o |\n ------" elif self.point == 2: return " ------\n| o |\n| |\n| o |\n ------" elif self.point == 1: return " ------\n| |\n| o |\n| |\n ------" # 生成两个骰子点数 dice1_point = random.randint(1,6) dice2_point = random.randint(1,6) total = dice1_point + dice2_point print("Face Value: %s" % total) # 实例化两个骰子对象并打印 print(Dice(dice1_point)) print(Dice(dice2_point))
效果说明
执行代码后会先打印两个骰子的总点数,再依次输出两个骰子的ASCII图案,符合功能预期。
内容的提问来源于stack exchange,提问作者Omitron_
相关产品推荐
相关产品推荐

