python - 如何在声明类实例时返回 None

标签 python

下面定义的

MyClass 接受一个参数 arg

class MyClass(object):
    def __init__(self, arg):
        super(MyClass, self).__init__()
        if not isinstance(arg, int):
            return None
        else:
            self.arg = arg

如果传入参数 arg 不是整数,我想返回 None 而不是 MyClass 的实例。

a = MyClass(arg='Text Argument')

但即使 MyClass 构造函数 __init__arg 不是整数时返回 None,结果变量 a仍然是 MyClass 的实例:

print a
<__main__.MyClass object at 0x0000000001FDEFD0>

如果给 MyClass 一个非整数参数,如何确保变量 a 保持为 None

最佳答案

您不应该从构造函数返回 None,即使这是可能的。 MyClass() 的结果应该始终是 MyClass 或兼容类的实例;其他任何事情都会非常令人惊讶和错误诱导行为™。

可以使用创建实际实例的自定义__new__ 方法来执行此操作。但同样,我不会推荐它。

如果无法使用给定数据构造对象,您应该引发异常:

class MyClass(object):
    def __init__(self, arg):
        super(MyClass, self).__init__()
        if not isinstance(arg, int):
            raise TypeError('arg must be an int')

        ...

关于python - 如何在声明类实例时返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476248/

相关文章:

python - Pandas 列名打印而不是整个 DataFrame

"internal"列表的 Pythonic 访问器/修改器

if语句中的Python数组元素

python - 如何添加数据帧一列的字符串并形成另一列,该列将具有原始列的增量值

python - django-rest-framework-接受提交的外键字段的ID

python - 对 Python 中的 If、Continue 和 else 的结果感到困惑

python - 如何用趋势线绘制多条轨迹?

python - 支持两个数据库后端并保持我的代码干燥的最pythonic方式/技巧是什么?

python - 为什么我的 'oldUser()'不运行并且为什么它总是重新启动?

python - 如何在Ubuntu上安装PyQt4-phonon(python3版本)