Python 中的类型安全

2024-03-25

我定义了一个Vector类具有三个属性变量:x, y and z。坐标必须是实数,但没有什么可以阻止人们执行以下操作:

>>> v = Vector(8, 7.3, -1)
>>> v.x = "foo"
>>> v.x
"foo"

我可以像这样实现“类型安全”:

import numbers

class Vector:
    def __init__(self, x, y, z):
        self.setposition(x, y, z)

    def setposition(self, x, y, z):
        for i in (x, y, z):
            if not isinstance(i, numbers.Real):
                raise TypeError("Real coordinates only")

        self.__x = x
        self.__y = y
        self.__z = z

    @property
    def x(self):
        return self.__x

    @property
    def y(self):
        return self.__y

    @property
    def z(self):
        return self.__z

...但这似乎不符合 Python 风格。

建议?


您必须问自己为什么要测试设置这些值的类型。只需提出一个TypeError在任何偶然发现错误 value 类型的计算中。奖励:标准操作已经做到了这一点。

>>> 3.0 / 'abc'
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: unsupported operand type(s) for /: 'float' and 'str'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的类型安全 的相关文章

随机推荐