例如,以一个表示人的简单类为例。唯一的类属性是表示人名的字符串。我想确保没有人试图将其他类型的对象传递给构造函数,例如 int 或 list...等。这是我在下面的第一次尝试,我认为如果参数不是 str,这将返回一个 None 类型的 obj,但它似乎仍然返回一个 Person obj。我来自“更多”强类型语言背景,我对如何在 python 中处理自己感到有点困惑。 pythonic 风格对这种情况和更普遍的类型安全有何看法?我应该提出异常(exception)吗?或者想办法返回 None?或者完全是别的东西。
class Person:
name = None
def __init__(self, name):
if not isinstance(name, str):
return None
self.name = name
请您参考如下方法:
您想在 __init__ 方法中引发错误:
if not isinstance(name,basestring):
raise TypeError("I don't think that is a name ...")
*请注意,basestring 还包括用于 python2.x 的 unicode,但在 python3.x 中不可用。
不过要小心,这里没有任何东西可以阻止用户在构建person 之后将人名重新设置到列表中。
jack = Person("Jack")
jack.name = ["cheese","steak"] #???
如果您想内置此安全性,则需要开始学习 property .
