types
— Criação de tipos dinâmicos e nomes para tipos embutidos¶
Código-fonte: Lib/types.py
Este módulo define funções utilitárias para auxiliar na criação dinâmica de novos tipos.
Também define nomes para alguns tipos de objetos usados pelo interpretador Python padrão, mas não expostos como componentes embutidos como int
ou str
são.
Por fim, fornece algumas classes e funções adicionais relacionadas ao tipo que não são fundamentais o suficiente para serem incorporadas.
Criação de tipos dinâmicos¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Cria um objeto de classe dinamicamente usando a metaclasse apropriada.
Os três primeiros argumentos são os componentes que compõem um cabeçalho de definição de classe: o nome da classe, as classes base (em ordem), os argumentos nomeados (como
metaclass
).O argumento exec_body é um retorno de chamada usado para preencher o espaço para nome da classe recém-criado. Ele deve aceitar o espaço para nome da classe como seu único argumento e atualizar o espaço para nome diretamente com o conteúdo da classe. Se nenhum retorno de chamada for fornecido, ele terá o mesmo efeito que passar em
lambda ns: None
.Adicionado na versão 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Calcula a metaclasse apropriada e cria o espaço de nomes da classe.
Os argumentos são os componentes que compõem um cabeçalho de definição de classe: o nome da classe, as classes base (em ordem) e os argumentos nomeados (como
metaclass
).O valor de retorno é uma tupla de 3:
metaclass, namespace, kwds
metaclass é a metaclasse apropriada, namespace é o espaço de nomes da classe preparada e kwds é uma cópia atualizada do argumento passado no kwds com qualquer entrada
'metaclass'
removida. Se nenhum argumento kwds for passado, este será um ditado vazio.Adicionado na versão 3.3.
Alterado na versão 3.6: O valor padrão para o elemento
namespace
da tupla retornada foi alterado. Agora, um mapeamento preservando-ordem-inserção é usado quando a metaclasse não possui um método__prepare__
.
Ver também
- Metaclasses
Detalhes completos do processo de criação de classe suportado por essas funções
- PEP 3115 - Metaclasses no Python 3000
Introduzido o gancho de espaço de nomes
__prepare__
- types.resolve_bases(bases)¶
Resolve entradas MRO dinamicamente, conforme especificado pela PEP 560.
Esta função procura por itens em bases que não sejam instâncias de
type
e retorna uma tupla onde cada objeto que possui um método__mro_entries__()
é substituído por um resultado desempacotado da chamada desse método. Se um item bases é uma instância detype
, ou não possui o método__mro_entries__()
, ele é incluído na tupla de retorno inalterada.Adicionado na versão 3.7.
- types.get_original_bases(cls, /)¶
Retorna a tupla de objetos originalmente dados como as bases de cls antes do método
__mro_entries__()
ter sido chamado em qualquer base (seguindo os mecanismos apresentados na PEP 560). Isso é útil para introspecção de Generics.For classes that have an
__orig_bases__
attribute, this function returns the value ofcls.__orig_bases__
. For classes without the__orig_bases__
attribute,cls.__bases__
is returned.Exemplos:
from typing import TypeVar, Generic, NamedTuple, TypedDict T = TypeVar("T") class Foo(Generic[T]): ... class Bar(Foo[int], float): ... class Baz(list[str]): ... Eggs = NamedTuple("Eggs", [("a", int), ("b", str)]) Spam = TypedDict("Spam", {"a": int, "b": str}) assert Bar.__bases__ == (Foo, float) assert get_original_bases(Bar) == (Foo[int], float) assert Baz.__bases__ == (list,) assert get_original_bases(Baz) == (list[str],) assert Eggs.__bases__ == (tuple,) assert get_original_bases(Eggs) == (NamedTuple,) assert Spam.__bases__ == (dict,) assert get_original_bases(Spam) == (TypedDict,) assert int.__bases__ == (object,) assert get_original_bases(int) == (object,)
Adicionado na versão 3.12.
Ver também
PEP 560 - Suporte básico para módulo typing e tipos genéricos
Tipos padrão do interpretador¶
Este módulo fornece nomes para muitos dos tipos necessários para implementar um interpretador Python. Evita deliberadamente incluir alguns dos tipos que surgem apenas incidentalmente durante o processamento, como o tipo listiterator
.
O uso típico desses nomes é para verificações isinstance()
ou issubclass()
.
Se você instanciar algum desses tipos, observe que as assinaturas podem variar entre as versões do Python.
Os nomes padrão são definidos para os seguintes tipos:
- types.FunctionType¶
- types.LambdaType¶
O tipo de funções definidas pelo usuário e funções criadas por expressões
lambda
.Levanta um evento de auditoria
function.__new__
com o argumentocode
.O evento de auditoria ocorre apenas para instanciação direta de objetos de função e não é levantado para compilação normal.
- types.CoroutineType¶
O tipo de objetos de corrotina, criado por funções de
async def
.Adicionado na versão 3.5.
- types.AsyncGeneratorType¶
O tipo de objetos de iterador gerador assíncrono, criados pelas funções do gerador assíncrono.
Adicionado na versão 3.6.
- class types.CodeType(**kwargs)¶
O tipo de objetos código retornados por
compile()
.Levanta um
code.__new__
de evento de auditoria com os argumentoscode
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Observe que os argumentos auditados podem não corresponder aos nomes ou posições exigidos pelo inicializador. O evento de auditoria ocorre apenas para instanciação direta de objetos de código e não é levantado para compilação normal.
- types.CellType¶
The type for cell objects: such objects are used as containers for a function’s closure variables.
Adicionado na versão 3.8.
- types.MethodType¶
O tipo de método de instâncias de classe definidas pelo usuário.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
O tipo de funções embutidas como
len()
ousys.exit()
, e métodos de classes embutidas. (Aqui, o termo “embutidas” significa “escrito em C”.)
- types.WrapperDescriptorType¶
O tipo de método de alguns tipos de dados embutidos e classes base, como
object.__init__()
ouobject.__lt__()
.Adicionado na versão 3.7.
- types.MethodWrapperType¶
O tipo de métodos vinculados de alguns tipos de dados embutidos e classes base. Por exemplo, é o tipo de
object().__str__
.Adicionado na versão 3.7.
- types.NotImplementedType¶
O tipo de
NotImplemented
.Adicionado na versão 3.10.
- types.MethodDescriptorType¶
O tipo de método de alguns tipos de dados embutidos, como
str.join()
.Adicionado na versão 3.7.
- types.ClassMethodDescriptorType¶
O tipo de métodos de classe não vinculados de alguns tipos de dados embutidos, como
dict.__dict__['fromkeys']
.Adicionado na versão 3.7.
- class types.ModuleType(name, doc=None)¶
O tipo de módulos. O construtor aceita o nome do módulo a ser criado e, opcionalmente, seu docstring.
Ver também
- Documentation on module objects
Provides details on the special attributes that can be found on instances of
ModuleType
.importlib.util.module_from_spec()
Modules created using the
ModuleType
constructor are created with many of their special attributes unset or set to default values.module_from_spec()
provides a more robust way of creatingModuleType
instances which ensures the various attributes are set appropriately.
- class types.GenericAlias(t_origin, t_args)¶
O tipo dos genéricos parametrizados como
list[int]
.t_origin
deve ser uma classe genérica não parametrizada, comolist
,tuple
oudict
.t_args
deve ser umatuple
(possivelmente com comprimento 1) de tipos que parametrizamt_origin
:>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
Adicionado na versão 3.9.
Alterado na versão 3.9.2: Este tipo pode agora ter uma subclasse.
Ver também
- Tipos Generic Alias
Documentação detalhada sobre instâncias de
types.GenericAlias
- PEP 585 - Sugestão de tipo para Genéricos em coleções padrão
Apresentação da classe
types.GenericAlias
- class types.UnionType¶
The type of union type expressions.
Adicionado na versão 3.10.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
O tipo de objetos traceback, como encontrados em
sys.exception().__traceback__
.Veja a referência de linguagem para detalhes dos atributos e operações disponíveis, e orientação sobre como criar tracebacks dinamicamente.
- types.FrameType¶
O tipo de objetos de quadro como encontrado em
tb.tb_frame
setb
é um objeto traceback.
- types.GetSetDescriptorType¶
O tipo de objetos definidos em módulos de extensão com
PyGetSetDef
, comoFrameType.f_locals
ouarray.array.typecode
. Este tipo é usado como descritor para atributos de objeto; tem o mesmo propósito que o tipoproperty
, mas para classes definidas em módulos de extensão.
- types.MemberDescriptorType¶
O tipo de objetos definidos em módulos de extensão com
PyMemberDef
, comodatetime.timedelta.days
. Este tipo é usado como descritor para membros de dados C simples que usam funções de conversão padrão; tem o mesmo propósito que o tipoproperty
, mas para classes definidas em módulos de extensão.In addition, when a class is defined with a
__slots__
attribute, then for each slot, an instance ofMemberDescriptorType
will be added as an attribute on the class. This allows the slot to appear in the class’s__dict__
.Detalhes da implementação do CPython: Em outras implementações de Python, este tipo pode ser idêntico a
GetSetDescriptorType
.
- class types.MappingProxyType(mapping)¶
Proxy somente leitura de um mapeamento. Ele fornece uma visão dinâmica das entradas do mapeamento, o que significa que quando o mapeamento muda, a visão reflete essas mudanças.
Adicionado na versão 3.3.
Alterado na versão 3.9: Atualizado para ter suporte ao novo operador de união (
|
) da PEP 584, que simplesmente delega para o mapeamento subjacente.- key in proxy
Retorna
True
se o mapeamento subjacente tiver uma chave key, senãoFalse
.
- proxy[key]
Retorna e o item do mapeamento subjacente com a chave key. Levanta um
KeyError
se key não estiver no mapeamento subjacente.
- iter(proxy)
Retorna um iterador sobre as chaves do mapeamento subjacente. Este é um atalho para
iter(proxy.keys())
.
- len(proxy)
Retorna o número de itens no mapeamento subjacente.
- copy()¶
Retorna uma cópia rasa do mapeamento subjacente.
- get(key[, default])¶
Retorna o valor para key se key estiver no mapeamento subjacente, caso contrário, default. Se default não for fornecido, o padrão é
None
, de forma que este método nunca levante umaKeyError
.
- items()¶
Retorna uma nova visão dos itens do mapeamento subjacente (pares
(chave, valor)
).
- keys()¶
Retorna uma nova visão das chaves do mapeamento subjacente.
- values()¶
Retorna uma nova visão dos valores do mapeamento subjacente.
- reversed(proxy)
Retorna um iterador reverso sobre as chaves do mapeamento subjacente.
Adicionado na versão 3.9.
- hash(proxy)
Retorna um hash do mapeamento subjacente.
Adicionado na versão 3.12.
- class types.CapsuleType¶
O tipo de objetos cápsula.
Adicionado na versão 3.13.
Classes e funções de utilidades adicionais¶
- class types.SimpleNamespace¶
Uma subclasse
object
simples que fornece acesso de atributo ao seu espaço de nomes, bem como um repr significativo.Ao contrário de
object
, comSimpleNamespace
você pode adicionar e remover atributos.Objetos
SimpleNamespace
podem ser inicializados da mesma forma quedict
: ou com argumentos nomeados, com um único argumento posicional, ou com ambos. Quando inicializados com argumentos nomeados, eles são adicionados diretamente ao espaço de nomes subjacente. Alternativamente, quando inicializado com um argumento posicional, o espaço de nomes subjacente será atualizado com pares de valores-chave desse argumento (um objeto mapeamento ou um objeto iterável produzindo pares de valores-chave). Todas essas chaves devem ser strings.O tipo é aproximadamente equivalente ao seguinte código:
class SimpleNamespace: def __init__(self, mapping_or_iterable=(), /, **kwargs): self.__dict__.update(mapping_or_iterable) self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented
SimpleNamespace
pode ser útil como um substituto paraclass NS: pass
. No entanto, para um tipo de registro estruturado, usenamedtuple()
.Objetos
SimpleNamespace
são suportados porcopy.replace()
.Adicionado na versão 3.3.
Alterado na versão 3.9: A ordem dos atributos no repr mudou de alfabética para inserção (como no
dict
).Alterado na versão 3.13: Adicionado suporte para um argumento posicional opcional.
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Roteia o acesso ao atributo em uma classe para __getattr__.
Este é um descritor, usado para definir atributos que atuam de forma diferente quando acessados por meio de uma instância e por meio de uma classe. O acesso à instância permanece normal, mas o acesso a um atributo por meio de uma classe será roteado para o método __getattr__ da classe; isso é feito levantando AttributeError.
Isso permite ter propriedades ativas em uma instância, e ter atributos virtuais na classe com o mesmo nome (veja
enum.Enum
para um exemplo).Adicionado na versão 3.4.
Funções de utilidade de corrotina¶
- types.coroutine(gen_func)¶
Esta função transforma uma função geradora em uma função de corrotina que retorna uma corrotina baseada em gerador. A corrotina baseada em gerador ainda é um iterador gerador, mas também é considerada um objeto corrotina e é aguardável. No entanto, pode não necessariamente implementar o método
__await__()
.Se gen_func for uma função geradora, ela será modificada no local.
Se gen_func não for uma função geradora, ela será envolta. Se ele retornar uma instância de
Collections.abc.Generator
, a instância será envolvida em um objeto proxy aguardável. Todos os outros tipos de objetos serão retornados como estão.Adicionado na versão 3.5.