Получение атрибутов объекта комбинированным вызовом
У меня есть класс 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)