Python __打印时未调用str_u;方法

Python __打印时未调用str_u;方法,python,class,Python,Class,我正在尝试创建一个简单的sql builder类,但是当我尝试打印import_uu的输出时,它似乎不会返回get_sql的内容,即使它的in_ustr_u函数也是如此。我做错了什么 class Query(object): """ Query builder entry functions """ @classmethod def _builder(cls): return QueryBuilder() @classmethod

我正在尝试创建一个简单的sql builder类,但是当我尝试打印import_uu的输出时,它似乎不会返回get_sql的内容,即使它的in_ustr_u函数也是如此。我做错了什么

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)

您需要在QueryBuilder.import方法的末尾添加一个return self,否则它将返回None,因此您的importQuery将为None,而不是您期望的QueryBuilder实例。

您使用的是IDE还是Jupyter?只写变量名而不调用print将调用_repr__;。现在添加了打印脚本工厂模式函数需要返回self,这样您就可以声明importQuery=Query.import\ux。。。否则,只能使用类构造函数创建对象。请不要这样编写代码。Python不是Java。而且,只有返回self才允许链接导入调用,这使它成为一种合适的构建器模式。