You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Python代码运行后输出<class '__main__.Dice1'>

问题原因
  • 你直接打印的是Dice1类本身,没有创建类的实例,类直接打印默认会输出类的类型标识字符串,也就是你看到的<class '__main__.Dice1'>
  • 类的__str__方法存在多处错误:
    1. 属性名拼写错误:方法内判断的self.dicernumber不存在,实际定义的属性是self.dicenumber
    2. __str__规范要求返回字符串对象,你在方法内直接调用print输出,没有返回值,即使实例化后打印也会输出None
    3. 判断逻辑混用实例属性和全局变量,部分分支直接判断全局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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:39:02