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

Python类中self作为方法参数传递及卡牌游戏Card类实现疑问

嘿,我来帮你搞定这两个问题——先把self的事儿讲明白,再把你的Card类补完整!

关于Python类中self参数的核心逻辑

咱先唠清楚self到底是啥:

  • self就是当前类实例本身的引用。当你创建一个Card对象(比如my_card = Card("屠龙者", 5, 120)),调用my_card.attack_enemy(enemy)的时候,Python会自动把my_card这个实例作为第一个参数传给方法,所以方法定义里必须写self来接住它。
  • 有了self,你才能在方法里访问这个实例的属性(比如self.name、self.attack)或者调用其他实例方法(比如self.getName())。要是没写self,Python调用方法时会因为参数不匹配直接报错。
  • 举个直白的例子:你调用my_card.getName(),Python背地里其实是执行Card.getName(my_card),这里的self就等于my_card,所以能返回这个实例的name属性。
修复并补全你的Card类

先提个关键问题:你的代码里属性名attack和方法名attack重名了!这会导致实例创建后,card.attack会指向整数类型的属性值,而不是方法,调用时会直接报错“int is not callable”。所以得把其中一个重命名,这里我把方法改叫attack_enemy,同时补全战斗逻辑:

class Card:
    def __init__(self, name = "", stars = 0, attack = 0):
        self.name = name
        self.stars = stars
        self.attack = attack
    
    def setName(self, name):
        self.name = name
    
    def getName(self):
        return self.name
    
    def setStars(self, stars):
        self.stars = stars
    
    def getStars(self):
        return self.stars
    
    def setAttack(self, attack):
        self.attack = attack
    
    def getAttack(self):
        return self.attack
    
    # 重命名方法避免冲突,同时补全攻击逻辑
    def attack_enemy(self, enemyCard):
        print(f"{self.name} 向 {enemyCard.getName()} 发起攻击!")
        print(f"{self.name} 攻击力:{self.attack} | {enemyCard.getName()} 攻击力:{enemyCard.getAttack()}")
        
        # 简单的战斗胜负判断
        if self.attack > enemyCard.getAttack():
            print(f"🎉 {self.name} 击败了 {enemyCard.getName()}!")
        elif self.attack < enemyCard.getAttack():
            print(f"😮 {enemyCard.getName()} 击败了 {self.name}!")
        else:
            print("🤝 双方势均力敌,打成平手!")

用法示例

你可以这样测试这个类:

# 创建两张卡牌
red_warrior = Card("赤焰战士", 5, 130)
blue_mage = Card("寒冰法师", 4, 110)

# 发起攻击
red_warrior.attack_enemy(blue_mage)

运行后会输出:

赤焰战士 向 寒冰法师 发起攻击!
赤焰战士 攻击力:130 | 寒冰法师 攻击力:110
🎉 赤焰战士 击败了 寒冰法师!

内容的提问来源于stack exchange,提问作者Kyle Marcus Enriquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:35:09