2017-05-23 35 views
2

我有一個數據庫對象不要創建對象時,如果條件沒有__init __()

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 

映射有了這樣的設計,對象每次創建一個類滿足,我們檢查,如果它與.exists屬性一起存在於數據庫中。

my_obj = MyObj(id=15) 
if my_obj.exists: 
    ...do stuff... 

它的工作原理。

但我懷疑還有就是初始化一個乾淨的方式,我們將只需要檢查這樣的:

my_obj = MyObj(id=15) 
if my_obj: 
    ...do stuff... 

回答

5

你不能在__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 
+0

是不是可以使用\ _ \ _德爾\ _ \ _在()方法\ _ \ _ INIT \ _ \ _()?通常我用全局類數組處理它(稱爲_instances_),如果我的條件成立,我會自動推送_self_。之後我只需循環_MyClass.instances_。 –

+0

nope,我試過但不起作用AttributeError:'Test'對象沒有屬性'__del__' – comte

+0

@martijn,你爲什麼要把instance = super()...似乎和'self'很好地配合,而不是' cls'和self.rows/return self – comte