2017-08-26 63 views
0

我試圖創建一個簡單的sql builder類,但是當我嘗試打印import_的輸出時,它似乎沒有返回get_sql的內容,即使它在__str__函數中。我究竟做錯了什麼?打印時未調用__str__方法

class Query(object): 
    """ 
    Query builder entry functions 
    """ 
    @classmethod 
    def _builder(cls): 
     return QueryBuilder() 

    @classmethod 
    def import_(cls, source_type): 
     return cls._builder().import_(source_type) 


class QueryBuilder(object): 
    """ 
    Query Builder is the main class that generates sql 
    """ 
    def __init__(self, quote_char='"'): 
     self._from = [] 
     self._import = None 
     self._source_type = None 
     self.quote_char = quote_char 

    def import_(self, source_type): 
     if source_type == SourceType.XML: 
      raise KeyError('Importing a XML is not supported') 
     self._source_type = source_type 

    def __str__(self): 
     return self.get_sql(quote_char='"') 

    def get_sql(self): 
     if not (self._import): 
      return 'test' 
     return 'e' 

打印腳本:

importQuery = Query.import_(sourceTypeEnum) 
print(importQuery) 
+0

您使用的是IDE還是Jupyter?只是在不調用'print'的情況下寫變量名就會調用'__repr__'。 –

+0

現在已經添加了打印腳本 –

+0

工廠模式函數需要'return self',這樣你可以聲明'importQuery = Query.import _ ..'。否則,只能使用類構造函數創建對象。 – Vinny

回答

1

您需要在您的QueryBuilder.import_方法的末尾添加return self,否則將返回None,因此你importQueryNone - 而不是你QueryBuilder的實例如你所料。

+1

此外,只有'return self'可以鏈接'import_'調用,使它成爲一個合適的構建器模式。 –