【问题标题】:How to create new instance of current class inside the current class method?如何在当前类方法中创建当前类的新实例?
【发布时间】:2019-10-01 14:36:13
【问题描述】:

我有课。在“完成”方法中,我想创建这个类的一个新实例并将其添加到数组中。但相反,它只是将我当前的实例添加到数组中。如何使用此方法创建新实例?

class Task:

    ArrPosition = 0

    def __init__(self, content, state, arr):
        self.content = content
        self.state = state
        self.arr = arr

    def Complete(self, Answer, CurrentPosition):
        if Answer == "True":
            self.state = "True"
            self.ArrPosition += 1
            if self.ArrPosition < 4:
                SessionArray[CurrentPosition + self.arr[self.ArrPosition]].append(Task(self.content, "NULL", [0,2,6,10]))
        if Answer == "False":
            self.state = "True"
            self.ArrPosition = 0
            SessionArray[CurrentPosition + 1].append(Task(self.content, "NULL", [0,2,6,10]))

其他示例展示了如何在类描述之外执行此操作,但我需要在内部执行此操作。

【问题讨论】:

  • 我不确定,因为有在类描述之外创建副本的情况,但我需要在里面这样做
  • 在该类的方法中创建新实例并没有什么特别之处——您肯定会将Task 的新实例附加到您的数组中。不幸的是,你没有给我们足够的minimal reproducible example 来告诉我们出了什么问题。在您发布的代码中看起来可疑的一件事是ArrPosition - 您将其初始化为类属性,然后用实例属性覆盖它,因此它可能没有您在新实例中期望的值。
  • 添加了新答案。它帮助了我:D

标签: python python-3.x


【解决方案1】:

解决了

class Task:

    ArrPosition = 0

    def __init__(self, ArrPosition, content, state, arr):
        self.ArrPosition = ArrPosition
        self.content = content
        self.state = state
        self.arr = arr

    def Clone(self):
        return Task(self.ArrPosition, self.content, "NULL", self.arr)

    def Complete(self, Answer, CurrentPosition):
        if Answer == "True":
            self.state = "True"
            self.ArrPosition += 1
            if self.ArrPosition < 4:
                SessionArray[CurrentPosition + self.arr[self.ArrPosition]].append(Task.Clone(self))
        if Answer == "False":
            self.state = "False"
            self.ArrPosition = 0
            SessionArray[CurrentPosition + 1].append(Task.Clone(self))

【讨论】:

    【解决方案2】:

    我在控制台上检查了脚本,没有进行任何更改,它在为Task 构造函数、Complete 方法的参数和SessionArray 变量选择了一些任意值时运行良好:

    问题的原因可能是代码中的其他地方,可能是您输入的一些不稳定的输入。

    【讨论】:

    • 在大数据集上工作时会出现问题。我用上面写的方法解决了它。谢谢!
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多