0

我有一个小问题,它本身并不是什么大问题,但仍然困扰着我。考虑下面的代码。

import pygame

class vector:
    def __init__(s, x, y):
        s.x = int(x)
        s.y = int(y)
        s.t = (s.x, s.y)

    def __add__(s, n):
        return vector(s.x + n[0], s.y + n[1])

size = vector(10, 10)

pygame.Surface((size + (5, 5)).t)

将向量作为参数传递给 pygame.Surface 时,我必须使用“t”属性来访问存储在“size”中的元组。

有没有办法让它像这样简单?

pygame.Surface(size + (5, 5))

如果没有引用属性或方法,是否有返回值的魔术方法?

在 pygame 中,您可以定义一个像这样的向量v = pygame.math.vector2(10, 10)然后将该向量传递给像这样的表面 blit 函数someSurface.blit(sprite, v)并且不需要引用方法或属性来获取值,所以它似乎是可能的,虽然我猜 blit 函数可以将 vector2 作为参数处理是完全合理的?

谢谢你的时间。

4

1 回答 1

1

实施__len____getitem__

class vector:
    def __init__(s, x, y):
        s.x = int(x)
        s.y = int(y)
        s.t = (s.x, s.y)

    def __add__(s, n):
        return vector(s.x + n[0], s.y + n[1])

    def __len__(s):
        return 2
   
    def __getitem__(s, i):
        return [s.x, s.y][i]
于 2021-04-30T06:14:57.430 回答