决定上课Vec2
:
class Vec2():
def __init__(self, x = 0, y = 0):
self.x, self.y = x, y
def __add__(self, num):
if type(num) == Vec2:
return Vec2(self.x + num.x, self.y + num.y)
return Vec2(self.x + num, self.y + num)
def __str__(self):
return f"{self.x} {self.y}"
还有一个问题,我可以实现一个__add__
没有if
'a的方法吗?
像这样的 C++ 代码:
vec2 operator+(vec2& v) {
return vec2(x + v.x, y + v.y);
}
vec2 operator+(double s) {
return vec2(x + s, y + s);
}
使用fastcore
typedispatch
库中的装饰器:结论:
我不得不分配一个单独的类
_Vec2
,因为如果你在注解中指定你自己的类,它开始对一个未声明的符号发誓Vec2
(如果你使用字符串注解"Vec2"
或 addfrom __future__ import annotations
,那么里面会抛出一个错误fastcore.dispatch
)。fastcore 库概述: fastcore:一个被低估的 Python 库
使用
singledispatchmethod
来自 Python 标准库的实现(根据我的口味,一个不太漂亮的选项,因为您需要将方法名称更改为下划线,但不需要额外的模块):作为一种选择:
但这适用于任何具有成员
x
或y
.一般来说,为什么有必要?
也是一个选项,但使用
if
-th: