为类变量赋值是为该对象的所有实例分配它

2023-12-30

我有一个带字典的课。

我创建了该类的 n 个实例。

当我 += 该字典中某个键上的值时,它会反映在我从该对象实例化的每个对象中。

如何使该字典对于该类的每个实例都是唯一的?

这是我创建对象的方法:

for num in range(0, numOfPlayers):
    listOfPlayerFleets.append(fleet.Fleet())

以下是如何调用 addShip 方法。我将其放在 for 循环中,并验证了 currentPlayer int 每次都会递增。

listOfPlayerFleets[currentPlayer].addShip(typeOfShip, num)

以下是我的舰队对象中的示例代码。

class Fleet:
""" Stores Fleet Numbers, Represents a fleet """


   shipNamesandNumber = {}


   def addShip(self, type, numToAdd):
      self.shipNamesandNumber[ships.shipTypesDict[type]['type']] += numToAdd  

在 pydev 中,当我单步执行此函数调用时,每个具有 shipNamesandNumbers 的对象都会按 numToAdd 递增。

即使 Fleet 对象位于内存中的不同位置,也会发生这种情况。

我必须传递另一个班级的字典吗?我写了一个测试类只是为了验证这一点:

class Foo:
"""Testing class with a dictionary"""

myDictionary = {}

def __init__(self):
    self.myDictionary = {'first':0, 'second':0}

def addItem(self, key, numToAdd):
    self.myDictionary[key] += numToAdd

numOfFoos = 2   
listOfFoos = []

for num in range(0, numOfFoos):
    listOfFoos.append(Foo())


listOfFoos[0].addItem('first', 1)
listOfFoos[0].addItem('first', 2)
listOfFoos[1].addItem('first', 2)
print " This is the value of foo1 it should be 3"
print listOfFoos[0].myDictionary

print "This is the value of foo2 ot should be 2"
print listOfFoos[1].myDictionary

Foo 类不存在与我的舰队对象相同的问题,当修改一个字典时,所有字典都会被修改。

所以这让我更加困惑。


你已经创建了shipNamesandNumber as a 类属性因为它直接包含在类中。每一次突变,甚至通过self,改变同一个字典。如果你想阻止这种情况,那么你必须创建一个实例属性,通常在__init__():

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

为类变量赋值是为该对象的所有实例分配它 的相关文章

随机推荐

  • 如何在 ASP.NET MVC 中以 BDD 风格进行单元和集成测试?

    我正在学习使用 ASP NET MVC 进行行为驱动开发 并且基于a post http blog stevensanderson com 2010 03 03 behavior driven development bdd with sp
  • OpenShift V3 的 DNS 条目

    我最近购买了一个域名 并尝试将此域名重定向到 OpenShift v3 Web 应用程序 这是我第一次设置这样的东西 所以请容忍我的无知 通常 OpenShift 提供一个主机名 类似于 myapp myproject preview op
  • 使用 facebook like 按钮时,评论弹出窗口消失,并出现“确认”按钮

    我试图在我的 WordPress 博客中包含一个类似 facebook 的按钮 并带有相应的 opengraph 标签来显示图像 描述等 当我测试它时 喜欢和不喜欢很多来检查结果 在单击喜欢按钮后 弹出的评论闪烁 然后突然出现一个 确认 链
  • Ionic 无法打开 Cors

    我正在尝试从 ionic android 应用程序中的实时服务器获取 API 数据 但它返回此错误 Access to XMLHttpRequest at https example com api categories from orig
  • Make 中的默认规则

    make 中是否有一种机制允许在任何地方使用默认的全局隐式规则 类似于内置规则 Make 提供了一些用于编译 C C Fortran 文件的内置隐式规则 甚至不需要Makefile对于简单的情况 然而 当编译其他语言 例如Go编程语言文件
  • 如何使用spaCy进行文本预处理?

    如何使用 python 在 spaCy 中执行预处理步骤 例如停用词删除 标点符号删除 词干提取和词形还原 我在 csv 文件中有文本数据 如段落和句子 我想做文本清理 请举例说明在 pandas 数据框中加载 csv 这可能有帮助 imp
  • 在多个提升组件之间共享服务

    我创建了两个单独提升的组件 在两个不同的视图中 并且我尝试在这两个组件之间共享一个独特的服务 单例 该服务用于操作这些组件之一 我的服务 Injectable export class ModalContainerService priva
  • 不允许 Nuget 和 Teamcity Agent 运行此配置

    我遇到了一个有趣的问题 我想使用 Teamcity 构建 nuget 包 我确实设置了非常简单的配置 干得好 JetBrains 但是我无法在我们的构建代理之一上运行它 该代理确实通过了配置的代理要求 但在其名称旁边显示以下内容 不允许运行
  • 如何在 IDEA 中从 Gradle 设置 checkstyle 配置

    我在 IDEA 中使用 Checkstyle 插件 我想为不同的模块设置不同的 checkstyle 配置 我使用 gradle 作为构建工具 版本 4 我想编写一个修改模块相应 iml 文件的任务 知道怎么做吗 我第一次尝试修改iml文件
  • 如何水平对齐跨度文本和输入元素

    我正在努力创建一个搜索表单 在这个搜索表单中 我使用了
  • CMake Eclipse 构建配置

    我想使用 CMake 生成 Eclipse CDT 项目 其中生成的 Eclipse 项目包含定义的构建类型作为 IDE 中的可选构建配置 例如 if CMAKE CONFIGURATION TYPES set CMAKE CONFIGUR
  • Networkx:使用公共函数进行边权重计算

    假设我有一个函数euc 2d graph n1 n2 计算同一图的两个节点之间的欧几里德距离 每个节点都有一个给定的pos x y 这是在图创建时分配的 NetworkX 提供了一个函数来获取图的所有边的总权重 即graph size we
  • 如何返回带有捕获的 unique_ptr 的 lambda [重复]

    这个问题在这里已经有答案了 使用这个 https stackoverflow com a 16968463 629530 https stackoverflow com a 16968463 629530 我可以在 lambda 中捕获 u
  • 密码自动完成功能不适用于我的网络应用程序(在 Firefox 中)

    我已经用 HTML 创建了一个登录提交表单 但由于某种原因 自动完成功能在 Firefox 中不起作用 这是 Firefox 中发生的情况 我提供用户名和密码 然后单击登录按钮 Firefox 会提示我是否要记住密码 我按 记住 并登录即可
  • Vagrant 来测试厨师食谱 - 但如何处理私人 git

    我使用 vagrant 来测试我的厨师食谱 问题是我已经克隆了我的私人存储库并且机器没有被认证 我如何自动对 boostrap Chef 进行 git 身份验证 我正在使用 vagrant ubuntu 11 10 with Chef Th
  • throw new TypeError('OAuth2Strategy 需要 clientID 选项'); }

    这是出现的错误 该怎么办 我创建了一个 socket io 聊天应用程序 这是一个使用 nodejs socket io 和 package json 的聊天应用程序 包 json dependencies body parser 1 15
  • 如果在构造函数中设置 DataContext,在调用 InitializeComponent() 之前还是之后设置它有什么关系吗?

    我有一个 WPF 窗口 它在构造函数中接受一些参数 然后我使用这些构造函数来设置窗口的状态 该构造函数过程的一部分是实例化我的视图模型类 然后将其设置为窗口DataContext 我的问题是我什么时候应该设置我的DataContext等于我
  • 在 Powershell 中捕获 Windows 窗体关闭事件

    我有一个窗口窗体 当我单击 Windows 窗体控制框的关闭 X 按钮时 我想显示一条消息或可能执行某些操作 下面是代码 void System Reflection Assembly LoadWithPartialName System
  • 你应该在 Github 上分叉还是分支? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 许多 github 存储库要求在每次重要的代码更改时创建一个分支 这与 git 中的分支完全相同 为什么github要引入forks 我喜欢 g
  • 为类变量赋值是为该对象的所有实例分配它

    我有一个带字典的课 我创建了该类的 n 个实例 当我 该字典中某个键上的值时 它会反映在我从该对象实例化的每个对象中 如何使该字典对于该类的每个实例都是唯一的 这是我创建对象的方法 for num in range 0 numOfPlaye