【问题标题】:Appending an object from a class into a list in another class将一个类中的对象附加到另一个类的列表中
【发布时间】:2021-02-05 07:53:07
【问题描述】:

我目前正在处理与课程相关的任务。在这个任务中,我必须创建一个名为“Balls”的类。这个类应该有一个 init 方法来添加一个名为 position 的 self 变量。这应该是 x 和 y 位置的列表。 之后,我应该创建另一个名为 System 的类。此类应负责要执行的主要操作。 然后我必须在 System 类中实现一个 add ball 方法,该方法将一个 Ball 对象附加到 System 内的类列表中。方法中的参数应该是x和y。

class Ball:
    def __init__ (self, x, y):
            self.position = [x, y]

ball1 = Ball(3, 6)
print (ball1.position)
ball2 = Ball(5, 8)
print (ball2.position)
ball3 = Ball(4, 4)
print (ball3.position)


class System:
    def __init__(self):
        self.more_balls = []
    def add_balls (self, x, y):
        self.more_balls.append(Ball(x,y))
        
ballx = System()
ballx.add_balls(2, 4)
ballx.add_balls(5,5)
ballx.add_balls(8,8)
ballx.add_balls(2,4)

print (ballx.more_balls)

我将如何修复代码。预期的结果是将球附加到 more_balls 列表中。 这是我得到的输出:

[3, 6]
[5, 8]
[4, 4]
[<__main__.Ball object at 0x12308eb80>, <__main__.Ball object at 0x12308edf0>,      <__main__.Ball object at 0x12308eeb0>, <__main__.Ball object at 0x12308e1f0>]

【问题讨论】:

  • 我不明白这个问题.. 对我来说,看起来代码正在做你想做的事情
  • 预期结果是球被附加到 more_balls 列表中,这就是正在发生的事情。有什么问题?

标签: python list class append


【解决方案1】:

您在add_balls 函数中犯了一个小错误。您忘记附加 Ball 对象的 position。以下是你如何纠正它:

def add_balls(self, x, y):
    self.more_balls.append(Ball(x, y).position)

因此,这里是完整的代码:

class Ball:
    def __init__(self, x, y):
        self.position = [x, y]


ball1 = Ball(3, 6)
print(ball1.position)
ball2 = Ball(5, 8)
print(ball2.position)
ball3 = Ball(4, 4)
print(ball3.position)


class System:
    def __init__(self):
        self.more_balls = []

    def add_balls(self, x, y):
        self.more_balls.append(Ball(x, y).position)


ballx = System()
ballx.add_balls(2, 4)
ballx.add_balls(5, 5)
ballx.add_balls(8, 8)
ballx.add_balls(2, 4)

print(ballx.more_balls)

输出:

[3, 6]
[5, 8]
[4, 4]
[[2, 4], [5, 5], [8, 8], [2, 4]]

【讨论】:

  • 创建一个对象只是为了获取传递给该对象构造函数的参数元组有点奇怪..
  • 嗯...但这正是 OP 想要的。
  • 我不确定。我认为他希望 more_balls 像嵌套列表一样打印,这可以使用属性 getter 来实现。
  • 哦...我误解了这个问题吗?让我们等待OP的回应。
【解决方案2】:

我认为System 类不负责接收postions 并实例化Ball 对象。

所以我会这样做:

class Ball:
    def __init__ (self, x, y):
            self.position = [x, y]

class System:
    def __init__(self):
        self.more_balls = []
    def add_ball (self, ball):
        self.more_balls.append(ball)

ball1 = Ball(3, 6)
print (ball1.position)
ball2 = Ball(5, 8)
print (ball2.position)
ball3 = Ball(4, 4)
print (ball3.position)        

ballHandler = System()
ballHandler.add_ball(ball1)
ballHandler.add_ball(ball2)
ballHandler.add_ball(ball3)

print (ballHandler.more_balls)
print (ballHandler.more_balls[0].position)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-04
    • 2015-07-12
    • 2017-12-20
    • 1970-01-01
    • 2020-05-27
    • 2023-04-10
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多