希望通过使用namedtuple来保存多个传递函数的变量来清理一些代码。下面是一个简化的例子(实际上我还有一些额外的参数)。
之前:
def my_function(session_cass, session_solr, session_mysql, some_var, another):
"""Blah blah.
Args:
session_cass (Session): Cassandra session to execute queries with.
session_solr (SolrConnection): Solr connection to execute requests with.
session_mysql (connection): MySQL connection to execute queries with.
some_var (str): Yada yada.
another (int): Yada yada.
"""之后:
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (namedtuple): Holds all the database sessions.
some_var (str): Yada yada.
another (int): Yada yada.
"""对于文档字符串,我一直在遵循谷歌风格指南,添加了类型(灵感来自this post),我真的很喜欢它,因为它可以更容易地跟踪进入的类型。
我的问题是,在这种情况下,您将如何记录命名元组?显然,在当前的设置中,您没有关于namedtuple中的类型的信息。这里有没有一种被接受的方法来扩展文档字符串,或者在定义的地方记录命名元组(没有显示)?
我知道您可以在这个庄园中记录一个类,但我正在努力避免使用一个类,因为除了保存变量之外,我没有任何其他用途。
发布于 2016-08-24 08:49:10
我对Google风格指南不太熟悉,但是这个怎么样:
对于命名的元组或元组或列表或任何可互换的东西,我会选择如下所示
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (sequence): A sequence of length n that
holds all the database sessions.
In position 0 need bla bla
In position 1 need ble ble
...
In position n-1 need blu blu
some_var (str): Yada yada.
another (int): Yada yada.
""" 另一方面,如果我使用namedtuple的属性,那么可能是这样的
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (object): A object that holds all the database sessions.
It need the following attributes
bla_bla is ...
ble_ble is ...
...
blu_blu is ...
some_var (str): Yada yada.
another (int): Yada yada.
""" 对于一本字典,这个怎么样?
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (map): A dictionary-like object that holds all the
database sessions, it need the following keys
bla_bla is ...
ble_ble is ...
...
blu_blu is ...
some_var (str): Yada yada.
another (int): Yada yada.
""" 或
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (customclass): Holds all the database sessions.
some_var (str): Yada yada.
another (int): Yada yada.
""" 在每个实例中,只需请求函数正常工作所需的最小功能
发布于 2018-06-23 16:24:23
namedtuple的Python3文档显示,命名元组的文档字符串可以通过将您自己的字符串附加到__doc__字段来定制。对于你的问题,你可以这样写:
Sessions = namedtuple('Sessions', ['cass', 'solr', 'mysql'])
Sessions.__doc__ += ': All database sessions.'
Sessions.cass.__doc__ += ': Cassandra session to execute queries with.'
Sessions.solr.__doc__ += ': Solr connection to execute requests with.'
Sessions.mysql.__doc__ += ': MySQL connection to execute requests with.'然后执行help(Sessions)输出:
Help on class Sessions in module MyModule:
class Sessions(builtins.tuple)
| Sessions(cass, solr, mysql): All database sessions.
|
| Method resolution order:
| Sessions然后在其他几行文档之后出现:
|----------------------------------------------------------------------
| Data descriptors defined here:
|
| cass
| Alias for field number 0: Cassandra session to execute queries with.
|
| solr
| Alias for field number 1: Solr connection to execute requests with.
|
| mysql
| Alias for field number 2: MySQL connection to execute requests with.
|
| ----------------------------------------------------------------------诚然,Sessions的大量自动文档文本可能会使您很难找到您添加的特定文档。
https://stackoverflow.com/questions/39112163
复制相似问题