- Они ведут себя как объекты экземпляра, поскольку их конструкторы принимают аргументы.
- Но они также ведут себя как объекты класса: они удовлетворяют isinstance() другого класса (например, (1,2,3) является кортежем, но isinstance((1,2,3), Tuple) также верно
- Проверщики типов Python (PyLance) принимают somevar : Tuple как допустимый тип
import typing
class Foo(object):
fixedargs : typing.Tuple
Это делает его похожим на класс. Но тогда это экземпляр _TupleType, который является подклассом _SpecialGenericAlias:
>>> import typing
>>>
>>> a = (3,4,5)
>>> isinstance(a, typing.Tuple)
True
>>> type(typing.Tuple)
>>>
и источник typing.py выглядит так:
class _TupleType(_SpecialGenericAlias, _root=True):
@_tp_cache
def __getitem__(self, params):
if not isinstance(params, tuple):
params = (params,)
if len(params) >= 2 and params[-1] is ...:
msg = "Tuple[t, ...]: t must be a type."
params = tuple(_type_check(p, msg) for p in params[:-1])
return self.copy_with((*params, _TypingEllipsis))
msg = "Tuple[t0, t1, ...]: each t must be a type."
params = tuple(_type_check(p, msg) for p in params)
return self.copy_with(params)
....
_alias = _SpecialGenericAlias
...
Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
Tuple.__doc__ = \
"""Deprecated alias to builtins.tuple.
Tuple[X, Y] is the cross-product type of X and Y.
Example: Tuple[T1, T2] is a tuple of two elements corresponding
to type variables T1 and T2. Tuple[int, float, str] is a tuple
of an int, a float and a string.
To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].
"""
List = _alias(list, 1, inst=False, name='List')
Deque = _alias(collections.deque, 1, name='Deque')
Set = _alias(set, 1, inst=False, name='Set')
Подробнее здесь: https://stackoverflow.com/questions/798 ... -as-an-ins
Мобильная версия