From 1d916bf9c0723e7c67fc5ace0fbfce050359ecb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Ot=C3=A1vio?= Date: Mon, 28 Nov 2022 09:36:06 -0300 Subject: [PATCH] =?UTF-8?q?Teoria:=20metaclasses=20s=C3=A3o=20o=20tipo=20d?= =?UTF-8?q?as=20classes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aula155.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 aula155.py diff --git a/aula155.py b/aula155.py new file mode 100644 index 0000000..5eac407 --- /dev/null +++ b/aula155.py @@ -0,0 +1,35 @@ +# Metaclasses são o tipo das classes +# EM PYTHON, TUDO É UM OBJETO (CLASSES TAMBÉM) +# Então, qual é o tipo de uma classe? (type) +# Seu objeto é uma instância da sua classe +# Sua classe é uma instância de type (type é uma metaclass) +# type('Name', (Bases,), __dict__) +# +# Ao criar uma classe, coisas ocorrem por padrão nessa ordem: +# __new__ da metaclass é chamado e cria a nova classe +# __call__ da metaclass é chamado com os argumentos e chama: +# __new__ da class com os argumentos (cria a instância) +# __init__ da class com os argumentos +# __call__ da metaclass termina a execução +# +# Métodos importantes da metaclass +# __new__(mcs, name, bases, dct) (Cria a classe) +# __call__(cls, *args, **kwargs) (Cria e inicializa a instância) +# +# "Metaclasses são magias mais profundas do que 99% dos usuários +# deveriam se preocupar. Se você quer saber se precisa delas, +# não precisa (as pessoas que realmente precisam delas sabem +# com certeza que precisam delas e não precisam de uma explicação +# sobre o porquê)." +# — Tim Peters (CPython Core Developer) + +# object acima +# class Foo: +# ... + + +Foo = type('Foo', (object,), {}) +f = Foo() +# print(isinstance(f, Foo)) +print(type(f)) +print(type(Foo))