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

将多def函数封装进Python class后出现函数未定义及调用异常问题排查

问题分析与解决方案

问题原因

  1. 类方法调用错误:类中的实例方法必须以self作为第一个参数,且调用类内其他方法时需要通过self.xxx()的形式,原代码直接调用函数名,导致解释器找不到对应函数,抛出未定义错误。
  2. 实例打印行为未定义:直接打印类实例时,Python默认输出对象的内存地址,因为没有重写__str__或__repr__方法来定义自定义打印内容。
  3. 原代码遗留错误:player2_bet方法里的pla == 1是拼写错误,应为pla1 == 1;另外Flop(deck)函数和deck变量未定义,会导致运行时错误。

解决方法

  1. 给类中所有实例方法添加self作为第一个参数,调用类内方法时统一使用self.前缀。
  2. 重写__str__方法,定义实例被打印时的输出内容(比如返回当前的对局结果)。
  3. 修复拼写错误,处理未定义的Flop和deck(暂时不需要可先注释,后续补充实现)。
  4. 实例化类后,需要调用start()方法启动交互逻辑,而非直接打印实例。

修正后的完整代码

class TwoPlayer:
    def __init__(self):
        self.winner = ''

    def start(self):
        pla2 = 0
        pla1 = int(input("What is pla1's choice? 1 , 2 , 3 :"))
        if pla1 == 3:
            self.winner = 'winner 2'
            return self.winner
        elif pla1 == 2 or pla1 == 1:
            return self.player2_bet(pla1, pla2)

    def player2_bet(self, pla1, pla2):
        pla2 = int(input("What is pla2's choice? 1 , 2 , 3 :"))
        if pla2 == 3:
            self.winner = 'winner 1'
            return self.winner
        elif pla2 == 2:
            if pla1 == 2:
                return 'check'
            elif pla1 == 1:
                return self.calpage(pla1, pla2)
        elif pla2 == 1:
            return self.calpage(pla1, pla2)

    def calpage(self, pla1, pla2):
        if pla1 == pla2 == 2:
            # Flop和deck未定义,先注释,后续补充实现
            # Flop(deck)
            return 'Flop to be implemented'
        else:
            return self.player1_bet(pla1, pla2)

    def player1_bet(self, pla1, pla2):
        pla1 = int(input("What is pla1's choice? 1 , 2 , 3 :"))
        if pla1 == 3:
            self.winner = 'winner 1'
            return self.winner
        elif pla1 == 2:
            if pla2 == 2:
                return 'check'
            elif pla2 == 1:
                return self.player2_bet(pla1, pla2)
        elif pla1 == 1:
            return self.player2_bet(pla1, pla2)

    def __str__(self):
        # 定义打印实例时的输出
        return f"TwoPlayer game result: {self.winner if self.winner else 'Game not finished'}"

# 使用示例
game = TwoPlayer()
result = game.start()
print(result)
# 打印实例查看结果
print(game)

内容的提问来源于stack exchange,提问作者신동협

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:35:25