Skip to main content
 首页 » 编程设计

python之检查构造函数参数有效性的 pythonic 方法是什么

2025年05月04日9telwanggs

例如,以一个表示人的简单类为例。唯一的类属性是表示人名的字符串。我想确保没有人试图将其他类型的对象传递给构造函数,例如 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 .