python - 父级与子级具有不同的变量名称

标签 python default-arguments

我正在编写一个简单的乒乓球游戏。我希望我的 Paddle 和 Ball 对象都继承自 DynamicObj,这是一个父类,它有一个 update 方法,该方法使用基本的简单欧拉积分来标记位置。问题在于 Paddle 对象的位置存储在 rect 中(因此使用 rect.x 访问 x 位置),而 Ball 对象的位置存储在 x 和 y 值中。有没有办法让它们都继承自同一个类,从而能够勾选它们的位置?

这是我到目前为止所拥有的:

class DynamicObj:
    def __init__(self, vel):
        self.vel = vel
    def update(self, delta):
        self.x += self.vel.x * delta
        self.y += self.vel.y * delta

class Ball(DynamicObj):
    def __init__(self, x, y, radius, vel):
        self.x = x
        self.y = y
        self.radius = radius
        self.vel = vel

class Paddle(DynamicObj):
    def __init__(self, rect, vel):
        self.rect = rect
        self.vel = vel
        #what I want is to create self.x and self.y that respectively point to the same place as self.rect.x and self.rect.y

我正在考虑是否可以使用property来实现这一点。

最佳答案

是的,properties会有所帮助:

class Paddle(DynamicObj):
    # ...
    @property
    def x(self):
        return self.rect.x

现在您的 Racket 将有一个只读字段x。如果您想要一个setter,请使用@x.setter来装饰它。

但我还是认为你的想法是错误的。通常用矩形来操作要容易得多。如果你碰巧使用 pygame,它有许多简洁的方法。只需让你的每个对象要么基于一个矩形类,要么有一个统一的方式来获取它(即接口(interface))。

您会问,到底为什么要用矩形来代替圆形球呢?这是因为矩形的粗略碰撞检测很便宜(再次参见 pygame 的高效方法)。如果两个矩形不发生碰撞,那么由它们包围的复杂形状的物体也肯定不会发生碰撞。仅当边界矩形发生碰撞时,您才必须运行可能更昂贵的精确碰撞检查。

关于python - 父级与子级具有不同的变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480783/

相关文章:

python - Flask-Restful 中输出异常信息

python - setup.cfg Python 项目的单一来源包版本

python - Mandelbrot 设置平滑着色函数

c++ - 编译器确定给出或省略参数

c++ - GCC 中默认参数段错误的 std::map 参数和空括号初始化器

python - 使用递归函数获取树的高度

c++ - 函数重载类设计

c++ - 可以通过 const 引用返回默认参数的值吗?

c++ - std::可选与默认参数

python - 多余的 python 参数