类型检查对象参数的正确方法[重复]

Posted

技术标签:

【中文标题】类型检查对象参数的正确方法[重复]【英文标题】:Proper way to typecheck object parameter [duplicate] 【发布时间】:2020-04-01 08:02:42 【问题描述】:

此代码似乎不起作用:

class Dog:
    def __init__(self,color):
        assert type(color) == 'str', 'Must be string'
        self.color = color

dog = Dog('black')


line 26, in __init__ assert type(color) == 'str', 'Must be string'
AssertionError: Must be string

即使我使用了字符串。他们是一种检查给定参数是否具有正确类型的方法吗?

【问题讨论】:

type(color) == str,而不是 type(color) == 'str'。另外,请检查isinstance 这能回答你的问题吗? Determine the type of an object? 我觉得重要的是要提到这可能是单调的。另外,assert 应该只用于调试。 【参考方案1】:

首先,'str'str 不同:第一个是字符串,第二个是 str 类。如果你和班级比较,(type('hello') == str) is True

您很可能想要检查参数是否是str 的实例:

assert isinstance(color, str), 'Must be string'

【讨论】:

【参考方案2】:

如果你想检查类型,而不使用isinstance,这是你的选择。

assert type(color) == type(""), 'Must be string'

assert type(color) == str, 'Must be string'

【讨论】:

为什么不只是type(color) == str @Tomerikoo 正确,正在编辑我的答案 @Tomerikoo type()isinstance()不是一回事。 (***.com/q/1549801/11301900) @AlexanderCécile 我很清楚这一点。我的意思是:考虑到现在的代码是type(color) == type(""),你不妨写type(color) == str。这是否是正确的方法,我没有声称要说明。只是一个明显的修复 @Tomerikoo 我很抱歉,不知何故我以为你是这个答案的作者。

以上是关于类型检查对象参数的正确方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

什么时候在 C# 中返回空引用类型是正确的 [重复]

如何正确检查对象是不是被字符串化? JS [重复]

将对象绑定到 Promise.then() 参数的正确方法 [重复]

检查元素是不是是javascript中的对象[重复]

检查对象的类型[重复]

检查html元素是不是存在的正确方法[重复]