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

如何创建以Ball类对象初始化并调用其方法的新类?

问题描述

现有如下定义的Ball类,用于描述小球及其属性:

import numpy as np

class Ball:
    def __init__(self, m=0.0,x=0.0, y=0.0):
        self.m = m
        self.x = x
        self.y = y
        self.r = np.array([x,y])
        
    def pos(self):
        print('Current position is:', self.r)  
            
    def move(self, x_move, y_move):
        x_moved = self.x + x_move
        y_moved = self.y + y_move
        self.r = np.array([x_moved, y_moved])
        # 补充同步更新x、y属性,避免数据不一致
        self.x = x_moved
        self.y = y_moved

需要创建一个新类(比如Simulation类),要求:

  • 以Ball类的对象作为初始化参数
  • 能够调用Ball类中的方法

用户尝试的代码示例如下:

a = Ball(2,2,2)

class Simulation:
    def __init___('''object of Ball e.g. a''', r):

    def next_move(self):
        position_after_next_move = a.pos + '''method move from class Ball'''
解决方案

正确的Simulation类实现如下:

class Simulation:
    def __init__(self, ball_obj):
        # 将传入的Ball对象保存为实例属性,后续通过它调用Ball类方法
        self.ball = ball_obj

    def next_move(self, x_move, y_move):
        # 调用Ball对象的move方法执行移动
        self.ball.move(x_move, y_move)
        # 调用Ball对象的pos方法打印当前位置
        self.ball.pos()
        # 返回移动后的位置数组
        return self.ball.r

使用示例

# 创建Ball实例
a = Ball(2, 2, 2)
# 创建Simulation实例,传入Ball对象
sim = Simulation(a)
# 执行移动:x方向移动1,y方向移动2
new_pos = sim.next_move(1, 2)
print("移动后的位置数组:", new_pos)

关键说明

  • 在Simulation的构造方法__init__中,接收一个Ball实例并赋值给self.ball,这样后续就能通过这个属性调用Ball类的所有方法。
  • 原Ball类的move方法存在数据不一致问题:更新了位置数组r但没同步更新x、y属性,所以上面的Ball类补充了同步代码。
  • next_move方法通过self.ball直接调用Ball类的move和pos方法,实现对小球的移动控制和状态查看。

内容的提问来源于stack exchange,提问作者thicccjk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:42:09