类中的变量类型:最佳编程实践

时间:2018-01-11 08:01:25

标签: python pep8

我定义了一个类如下:

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分量向量的正确方法是什么?

2 个答案:

答案 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')