在__init __()中如果不满足条件时不要创建对象

com*_*mte 5 python oop python-3.x

我有一个映射数据库对象的类

class MyObj:
    def __init__(self):
        ...SQL request with id as key...
        if len(rows) == 1:
            ...maps columns as my_obj attributes...
            self.exists = True
        else:
            self.exists = False
Run Code Online (Sandbox Code Playgroud)

通过这样的设计,每次都会创建一个对象,并使用.exists属性检查它是否存在于数据库中.

my_obj = MyObj(id=15)
if my_obj.exists:
    ...do stuff...
Run Code Online (Sandbox Code Playgroud)

有用.

但我怀疑有一种更简洁的初始化方法,我们只需要检查:

 my_obj = MyObj(id=15)
 if my_obj:
     ...do stuff...
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

您无法执行此操作__init__,因为该方法创建新实例运行.

但是,你可以这样做object.__new__(),这是为了首先创建实例.因为它通常应该返回该新实例,所以您也可以选择返回其他内容(例如None).

你可以像这样使用它:

class MyObj:
    def __new__(cls, id):
        # ...SQL request with id as key...
        if not rows:
            # no rows, so no data. Return `None`.
            return None

        # create a new instance and set attributes on it
        instance = super().__new__(cls)  # empty instance
        instance.rows = ...
        return instance
Run Code Online (Sandbox Code Playgroud)