Python中的递归类定义

我正在使用
Python中的流畅接口进行实验.

一个流畅的SQL查询生成器的示例在使用中看起来像这样:

sql.select('foo').select('bar').from('sometable').tostring() 

我很快意识到递归定义嵌套类的能力可能会有所帮助.

class sql:
    class select:        
        class select   # <--  HERE
        def __init__(self, dbcolumn, astype=None, asname=None):
            self.dbcolumn = dbcolumn
            self.astype = astype
            self.asname = asname

在标有评论’#< – HERE’的行中:
我希望这个嵌套类引用引用包含类的相同“select”类定义.

这有可能吗?也许使用一些我不知道的关键字?

最佳答案 不需要“递归类定义”.允许链接的所有操作都是在方法中返回self(如果对象不可变或某些方法不应修改输入对象,则返回同一类的实例).

例:

>>> class SQL(object):
...     def __init__(self):
...         self.columns = []
...     def select(self, col):
...         self.columns.append(col)
...         return self
...
>>> s = SQL()
>>> s.select('foo').select('bar').columns
['foo', 'bar']
点赞