__slots__Python中的目的是什么- 特别是关于我何时想要使用它,何时不想使用它?
Python的namedtuple作为一个轻量级,不可变的数据类非常有用.我喜欢将它们用于簿记参数而不是字典.当需要更多功能时,例如简单的文档字符串或默认值,您可以轻松地将namedtuple重构为类.但是,我已经看到继承自namedtuple的类.他们获得了什么功能,他们失去了什么表现?例如,我会将其实现为
from collections import namedtuple
class Pokemon(namedtuple('Pokemon', 'name type level')):
"""
Attributes
----------
name : str
What do you call your Pokemon?
type : str
grass, rock, electric, etc.
level : int
Experience level [0, 100]
"""
__slots__ = ()
Run Code Online (Sandbox Code Playgroud)
唯一的目的是能够干净地记录attrs,并__slots__用于防止创建__dict__(保持namedtuples的轻量级特性).
是否有更好的建议使用轻量级数据类来记录参数?注意我使用的是Python 2.7.
希望通过使用命名元组来保存多个变量以通过多个函数来清理一些代码。下面是一个简化的例子(我实际上还有一些额外的参数)。
前:
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.
"""
Run Code Online (Sandbox Code Playgroud)
后:
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.
"""
Run Code Online (Sandbox Code Playgroud)
对于文档字符串,我一直在遵循 Google 样式指南,并添加了类型(受这篇文章的启发),我非常喜欢它,因为它可以更轻松地跟踪传入的类型。
我的问题是,在这种情况下,您将如何记录命名元组?显然,由于它当前已设置,因此您没有关于 namedtuple 中的类型的信息。是否有一种可接受的方法可以在此处扩展文档字符串,或者记录定义它的命名元组(未显示)?
我知道你可以在这个庄园里记录一个类,但我试图远离使用一个类,因为除了保存变量之外,我真的没有任何目的。