Как работают классы псевдонимов типов (псевдоклассы?), такие как typing.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
Как псевдонимы типов (typing.Tuple, typing.Set, typing.List и т. д.) работают не только как экземпляр, но и как класс? ⇐ Python
Программы на Python
1769198423
Anonymous
Как работают классы псевдонимов типов (псевдоклассы?), такие как typing.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')
Подробнее здесь: [url]https://stackoverflow.com/questions/79874842/how-do-type-aliases-typing-tuple-typing-set-typing-list-etc-work-as-an-ins[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия