当Python只应附加到一个列表时,它附加到两个列表

2024-04-28

我有一个名为“团队”的列表,其中包含两个对象,这些对象是同一类的对象,并且它们都有一个“成员”列表。我将单独附加到这些列表中。请参阅 Fight.AddParticipant,但我附加的两个参与者对象似乎最终出现在两个团队对象中,这是意外行为。为什么会发生这种情况?

Code:

class Fight:
    participants = []
    teams = []
    attacked = []
    fighting = 0

    def MakeTeams(self, team):
        self.teams.append(team)

    def NumParticipants(self, teamnum = None):
        if (teamnum != None):
            return len(self.teams[teamnum].members)
        else:
            return len(self.participants)


    def AddParticipant(self, participant, team):
        self.participants.append(participant)
        ref = self.participants[-1]
        self.teams[team].members.append(ref)
        # print self.teams[1].members[0].name

    def SetFighting(self):
        self.fighting = self.NumParticipants()

    def AnnounceFight(self):
        print 'A battle between', self.NumParticipants(), 'fighters has begun!\n\n'
        self.AnnounceTeams()

    def AnnounceTeams(self):
        print ''
        for team in self.teams:
            print "Team name:", team.name
            print "Team morale:", team.morale
            for member in team.members:
                print member.name


class Participant:
    name = ""
    race = ""
    sex = ""
    hp = 0
    strength = 0
    agility = 0
    weapon = ""
    alive = True

    def __init__(self, name, race, sex, hp, strength, agility, weapon, alive = True):
        self.name = name
        self.race = race
        self.sex = sex
        self.hp = hp
        self.strength = strength
        self.agility = agility
        self.weapon = weapon
        self.alive = alive


class Team:
    name = ""
    members = []
    morale = 0

    def __init__(self, name, morale):
        self.name = name
        self.morale = morale

Fight = Fight()
Fight.MakeTeams(Team('Smart', 1))
Fight.MakeTeams(Team('Dumb', 1))
Fight.AddParticipant(Participant("Foo", "Human", "Female", 15, 15, 20, "Knife"), 0)
Fight.AddParticipant(Participant("Bar", "Human", "Male", 15, 15, 20, "Sabre"), 1)
Fight.SetFighting()
Fight.AnnounceFight()

在所有类中,您希望像这样初始化实例变量:

def __init__(self):
    self.participants = []
    self.teams = []
    self.attacked = []
    self.fighting = 0

这样,它们对于每场战斗、参与者、团队都是独立的,而不是为所有战斗、参与者或团队共享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当Python只应附加到一个列表时,它附加到两个列表 的相关文章

随机推荐

  • 以 ng-repeat 角度随机播放数组

    我正在创建一个测验 每次开始测验时我都想打乱问题的顺序 这样它们就不会每次都以相同的顺序出现 我的 html 代码中有这样的内容 div div question question div img img class quizImg div
  • 在 MATLAB 中绘制圆

    我被要求找到在 MATLAB 中绘制圆的不同方法 看起来很无聊 不过我可以想出一些想法 有些可能效率低下 Method 1 ezpolar x 1 Method 2 t linspace 0 2 pi 100 plot sin t cos
  • iPhone X 的顶栏高度是多少?

    我想知道 iPhone X 顶栏的具体高度 您能否提及iPhone X的状态栏和导航栏高度 请帮我 然而 iPhone X 上的显示屏145pt比 4 7 英寸显示屏高 从而为内容提供大约 20 的额外垂直空间 欲了解更多信息 请获取 Ap
  • 使用 GridsearchCV () 进行保留验证

    GridsearchCV 有一个参数cv 默认值为3 表示是3倍 有没有办法将 Gridsearch 与保留验证方案一起使用 例如80 20 分割 你可以使用sklearn model selection ShuffleSplit or s
  • ESLint 错误:“@storybook/react”应该列在项目的依赖项中,而不是 devDependencies

    使用 ESLint 将 Storybook 安装到 React js 应用程序中后 VSCode linter 无法识别 storybook react示例中的导入 stories js files 它给了我以下错误 storybook r
  • Java 中是否有等效于 C++ 的析构函数? [复制]

    这个问题在这里已经有答案了 最简单的设计如下 class Session Timer t new Timer 每当 Session分配完毕后 我在其中启动一个计时器 计时器将在 10 20 分钟后到期 现在 假设如果Session在计时器到
  • C++ 强制转换为 void 的目的是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 将未使用的返回值强制转换为 void https stackoverflow com questions 689677 casting unused return values to void 我读了
  • 如何恢复默认状态栏颜色?

    在我的一项活动中 我不希望状态栏有任何颜色 我希望它在我的应用程序运行之前保持为任何颜色 我可以将其更改为黑色 但黑色不是默认值 默认值是透明的 我不想尝试找出哪种透明度是正确的 因为它在其他人的手机上可能有所不同 所以我想在此特定活动中基
  • 查找字符串中只出现一次的字符

    我正在用 PHP 编写一个算法来解决给定的数独难题 我已经设置了一个带有两个类的面向对象的实现 Square9x9 棋盘上每个单独图块的类 以及Sudoku类 其矩阵为Squares 代表董事会 我正在使用的算法的实现是一种三层方法 第一步
  • var chat = $.connection.chat; 出现对象未定义错误使用 SignalR 时

    我尝试安装 SignalR 库来创建示例聊天应用程序 我相信我已遵循文档中给出的所有步骤 我不确定失败的原因是什么 创建聊天对象时失败 我正在使用 VS2010 并使用 VS2010 包下载实用程序下载 SignalR 有人对此有疑问吗 谢
  • jq:删除具有空字符串值的键

    我有以下 JSON data NAME Test 1 ID 1 IP 192 168 1 2 80 NAME Test 2 ID 2 IP NAME Test 3 ID 3 IP 192 168 1 3 80 NAME Test 4 ID
  • 使用简洁形式的 NSManagedObjectID URI?

    在我的应用程序中 我使用 Core Data 以及不使用 Core Data 的附加 sqlite 数据库 在这个附加数据库中 我有一些列存储对NSManagedObject实例通过每个实例的NSManagedObjectID 我得到一个实
  • 带参数和不带参数的 super() 有什么区别?

    我遇到了一个使用的代码super 方法有两种不同的方式 我不明白逻辑上有什么区别 我现在正在学习pygame模块 我有一个任务来创建一个类Ball它继承自Sprite这是一个来自pygame模块 如果我没记错的话 我遇到了这段代码 impo
  • 通过 UIActivityViewController 与 WhatsApp 共享时按钮中的文本颜色错误

    当我与 WhatsApp 分享短信时UIActivityViewController就我而言 共享的第二个屏幕的按钮颜色错误 第一屏就OK了 这个问题已经讨论过很多次了 可以在这里找到很多答案 当从 iOS7 中的 UIActivityVi
  • 将显示的模式(路径)绑定到数据模型/如何使路径具有相同的维度

    背景 随意跳过此 我正在构建一个处理马匹 马匹主人以及主人的比赛颜色 丝绸 的程序 这个问题是关于一个UserControl 称为SilksControl充当视图JockeySilks 为了表示丝绸 我使用以下枚举类 public clas
  • 使用 Xamarin.Forms 和 .net Standard 进行 Firebase 电子邮件/密码身份验证 (VS2017)

    Firebase 电子邮件 密码身份验证是否可以使用通用代码 net 标准的 Android 和 IOS 通用代码进行开发 我已经设计了具有 XAML 格式的简单登录页面 但我没有找到任何与 Firebase 身份验证与 Xamarin F
  • 类似 Instagram 的强制触摸弹出模式

    我正在尝试复制 Instagram 的强制触摸功能 其中 1 将手指放在图像上 图像会变暗 悬停效果 简单 2 用力按一下 就会出现内容的弹出模式预览 3 用力按压 模式将扩展至全屏 我在使用 Ionic 4 Cordova 3d touc
  • microsoft.visualbasic.fileio 不存在

    我使用 NET Framework 4 0 在 Visual Studio 2012 中构建 C Web 应用程序 我添加了 Microsoft VisualBasic 作为对该项目的引用 我在使用以下代码行时遇到问题 使用 Microso
  • 如何在同一活动中为底部导航和导航抽屉创建侦听器?

    这是我的java代码 public class HomeActivity extends AppCompatActivity implements NavigationView OnNavigationItemSelectedListene
  • 当Python只应附加到一个列表时,它附加到两个列表

    我有一个名为 团队 的列表 其中包含两个对象 这些对象是同一类的对象 并且它们都有一个 成员 列表 我将单独附加到这些列表中 请参阅 Fight AddParticipant 但我附加的两个参与者对象似乎最终出现在两个团队对象中 这是意外行