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))