Я создал эту функцию для быстрого создания именованного кортежа и документирования кортежа вместе с каждым из его параметров:
<code>from collections import namedtuple
def named_tuple(name, description='', **kwargs):
"""
A named tuple with docstring documentation of each of its parameters
:param str name: The named tuple's name
:param str description: The named tuple's description
:param kwargs: This named tuple's parameters' data with two different ways to describe said parameters. Format:
<pre>{
str: ( # The parameter's name
str, # The parameter's type
str # The parameter's description
),
str: str, # The parameter's name: the parameter's description
... # Any other parameters
}
: return: collection.namedtuple
«»»
имя_параметра = список (kwargs.keys ())
результат = namedtuple (name, '' .join (имя_параметра))
# Если есть какие-либо параметры (например, это не пустой именованный кортеж)
если len (имя_параметра):
# Добавить межстрочный интервал перед описанием параметров этого именованного кортежа
если описание не '':
описание + = "\ n"
# Просмотрите каждый предоставленный параметр и добавьте его в описание строки документа именованного кортежа.
для имени_параметра в именах параметров:
параметр_данные = kwargs [имя_параметра]
# Определите, включен ли тип параметра вместе с описанием или
# если было предоставлено только описание
параметр_тип = ''
if isinstance (параметр_данные, строка):
Параметр_данных = Параметр_данных
еще:
тип_параметра, параметр_добавление = параметр_данные
описание + = "\ n: параметр {тип} {имя}: {описание}". формат (
type = parameter_type + '' if parameter_type else '',
имя = parameter_name,
Описание = parameter_description
)
# Изменить строку документации, специфичную для этого параметра
getattr (результат, имя_параметра) .__ doc__ = описание_параметра
# Установить описание строки документа для результирующего именованного кортежа
результат .__ doc__ = описание
вернуть результат
Затем вы можете создать новый кортеж с именем:
MyTuple = named_tuple(
"MyTuple",
"My named tuple for x,y coordinates",
x="The x value",
y="The y value"
)
Затем создайте экземпляр описанного именованного кортежа со своими собственными данными, т. Е.
t = MyTuple(4, 8)
print(t) # prints: MyTuple(x=4, y=8)
При выполнении help(MyTuple)
через командную строку python3 отображается следующее:
Help on class MyTuple:
class MyTuple(builtins.tuple)
| MyTuple(x, y)
|
| My named tuple for x,y coordinates
|
| :param x: The x value
| :param y: The y value
|
| Method resolution order:
| MyTuple
| builtins.tuple
| builtins.object
|
| Methods defined here:
|
| __getnewargs__(self)
| Return self as a plain tuple. Used by copy and pickle.
|
| __repr__(self)
| Return a nicely formatted representation string
|
| _asdict(self)
| Return a new OrderedDict which maps field names to their values.
|
| _replace(_self, **kwds)
| Return a new MyTuple object replacing specified fields with new values
|
| ----------------------------------------------------------------------
| Class methods defined here:
|
| _make(iterable) from builtins.type
| Make a new MyTuple object from a sequence or iterable
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(_cls, x, y)
| Create new instance of MyTuple(x, y)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| x
| The x value
|
| y
| The y value
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| _fields = ('x', 'y')
|
| _fields_defaults = {}
|
| ----------------------------------------------------------------------
| Methods inherited from builtins.tuple:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __getitem__(self, key, /)
| Return self[key].
|
| __gt__(self, value, /)
| Return self>value.
|
| __hash__(self, /)
| Return hash(self).
|
| __iter__(self, /)
| Implement iter(self).
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __mul__(self, value, /)
| Return self*value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __rmul__(self, value, /)
| Return value*self.
|
| count(self, value, /)
| Return number of occurrences of value.
|
| index(self, value, start=0, stop=9223372036854775807, /)
| Return first index of value.
|
| Raises ValueError if the value is not present.
Кроме того, вы также можете указать тип параметра через:
MyTuple = named_tuple(
"MyTuple",
"My named tuple for x,y coordinates",
x=("int", "The x value"),
y=("int", "The y value")
)