Articles of metaclass

IPython representación de clases.

Estaba probando IPython con un módulo que creé y no muestra la representación real de los objetos de clase. En cambio, muestra algo como TheClass.__module__ + ‘.’ + TheClass.__name__ Uso mucho las metaclases en este módulo y tengo representaciones de clase realmente significativas que deberían mostrarse al usuario. ¿Existe algún método específico de IPython que […]

Quien llama a la metaclase

Esto en realidad se deriva de una discusión aquí en SO. Version corta def meta(name, bases, class_dict) return type(name, bases, class_dict) class Klass(object): __metaclass__ = meta Se llama a meta() cuando se ejecuta la statement de clase Klass . ¿Qué parte del código (interno de Python) realmente llama meta() ? Versión larga Cuando se declara […]

¿Cómo funciona un objeto classmethod?

Me cuesta entender cómo funciona un objeto classmethod en Python, especialmente en el contexto de las metaclases y en __new__ . En mi caso especial, me gustaría obtener el nombre de un miembro de método de clase, cuando repito los members que se dieron a __new__ . Para los métodos normales, el nombre simplemente se […]

Metaclase para parametrizar la herencia.

He leído algunos tutoriales sobre metaclases de Python. Nunca he usado uno antes, pero necesito uno para algo relativamente simple y todos los tutoriales parecen estar orientados a casos de uso mucho más complejos. Básicamente, quiero crear una clase de plantilla que tenga un cuerpo preespecificado, pero toma su clase base como parámetro. Desde que […]

Anulación de la metaclase de tipo () predeterminada antes de que se ejecute Python

Aquí hay dragones. Has sido advertido. Estoy pensando en crear una nueva biblioteca que intentará ayudar a escribir un mejor conjunto de pruebas. Para hacer eso, una de las características es una característica que verifica que cualquier objeto que se esté utilizando y que no sea el corredor de prueba y el sistema bajo prueba […]

Uso de metaclases para anular métodos de complejos integrados

Como ejercicio de aprendizaje, estoy tratando de implementar una clase que emulará el comportamiento del complex componente de Python, pero con un comportamiento diferente de los métodos __str__ y __repr__ : quiero que se impriman en el formato … (1.0,2.0) …en lugar de: (1+2j) Primero intenté simplemente subclasificar desde complex y redefiniendo __str__ y __repr__ […]

¿Hay alguna razón para elegir __new__ sobre __init__ al definir una metaclase?

Siempre he configurado metaclases como esta: class SomeMetaClass(type): def __new__(cls, name, bases, dict): #do stuff here Pero acabo de encontrar una metaclase que fue definida así: class SomeMetaClass(type): def __init__(self, name, bases, dict): #do stuff here ¿Hay alguna razón para preferir uno sobre el otro? Actualización : tenga en cuenta que estoy preguntando sobre el […]

¿Para qué son útiles las metaclases de Python?

¿Qué se puede hacer con las metaclases que no pueden ser de otra manera? Alex Martelli dijo que hay tareas que no se pueden lograr sin las metaclases. ¿Qué son las metaclases de Python y los decoradores de clase que me gustaría saber cuáles son?

¿Cómo funciona la clase Meta de Django?

Estoy usando Django, que permite a las personas agregar parámetros adicionales a una clase usando la class Meta . class FooModel(models.Model): … class Meta: … Lo único que encontré en la documentación de Python fue: class FooMetaClass(type): … class FooClass: __metaclass__ = FooMetaClass Sin embargo, no creo que esto sea lo mismo.

¿Detectar si la clase fue definida declarativa o funcional – posible?

Aquí hay una clase simple creada declarativamente: class Person: def say_hello(self): print(“hello”) Y aquí hay una clase similar, pero se definió invocando la metaclase manualmente: def say_hello(self): print(“sayolala”) say_hello.__qualname__ = ‘Person.say_hello’ TalentedPerson = type(‘Person’, (), {‘say_hello’: say_hello}) Me interesa saber si son indistinguibles. ¿Es posible detectar tal diferencia desde el objeto de clase en sí? […]