我定义了一个类如下:
import numpy as np
class Vector:
def __init__(self, v):
self.v = v
我可以通过执行以下操作来创建类的实例:
p1 = np.array([0.0, 0.0, 0.0])
v1 = Vector(p1)
v2 = Vector(3)
我的意图是Vector总是在3D空间中包含一个向量。但是,在python中确保Vector始终是一个3分量向量的正确方法是什么?
答案 0 :(得分:1)
您可以通过两种方式执行此操作,这两种方式可以同时使用。首先,在运行时:
class Vector:
def __init__(self, v):
if not isinstance(v, np.ndarray) or v.shape != (3,):
raise ValueError("vector must be 3-dimensional array")
self.v = v
检查这样的类型几乎是python中的标准约定。但是,使用Python 3.5+,添加了typing
模块,它允许所谓的“类型提示”,可以通过IDE或linter进行静态分析:
class Vector:
def __init__(self, v: np.ndarray[float, shape=(3,)]):
self.v = v
但是,numpy尚未完全实现类型提示(上面的语法是初步的),请参阅this tracking issue on GitHub。
答案 1 :(得分:0)
Not sure if this is the best way to do it, but for sure is one way. You can check with the following code:
import numpy as np
class Vector:
def __init__(self, v):
if isinstance(v, np.ndarray) and v.size == 3:
self.v = v
else:
raise ValueError('param is not an Array in the 3D space')