Получение атрибутов объекта комбинированным вызовом

У меня есть класс vec3:

class vec3:
    def __init__(self, x = 0, y = 0, z = 0):
        self.x = x
        self.y = y
        self.z = z
    
    def __str__(self):
        return f"{self.x} {self.y} {self.z}"

v = vec3(0, 1, 2)

также есть код на unity и c#:

float sphere(float4 s, float3 p)
{
    return length(p - s.xyz) - s.w;
}

Меня интересует строка s.xyz.

Как такое можно реализовать на python, что бы если я напишу v.yyz возвращался новый объект с параметрами 1 1 2?


Ответы (2 шт):

Автор решения: Victor VosMottor

Ну... как бы в питоне нет такой фичи, но можно сделать по-обычному:

print(*[v.x, v.y, v.z])
→ Ссылка
Автор решения: Danis

Спасибо @alex за подсказку

class vec3:
    def __init__(self, x = 0, y = 0, z = 0):
        self.x = x
        self.y = y
        self.z = z
    
    def __str__(self):
        return f"{self.x} {self.y} {self.z}"
    
    def __getattr__(self, arg):
        if len(arg) != 3:
            raise AttributeError
            
        x = self.__dict__[arg[0]]
        y = self.__dict__[arg[1]]
        z = self.__dict__[arg[2]]
        
        return vec3(x, y, z)
→ Ссылка