如何创建以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
相关产品推荐
相关产品推荐

