Articles of metaclase de

Metaclases de Python: ¿Por qué no se llama a __setattr__ para establecer los atributos durante la definición de la clase?

Tengo el siguiente código de python: class FooMeta(type): def __setattr__(self, name, value): print name, value return super(FooMeta, self).__setattr__(name, value) class Foo(object): __metaclass__ = FooMeta FOO = 123 def a(self): pass Hubiera esperado que se __setattr__ de la meta clase tanto para FOO como para a . Sin embargo, no se llama en absoluto. Cuando asigno […]

El error al llamar a las bases de metaclase: función () el argumento 1 debe ser código, no str

Intenté subordenar subprocesos. Condición anterior hoy, pero no funcionó. Aquí está la salida del intérprete de Python cuando bash subclasificar la clase threading.Condition: >>> import threading >>> class ThisWontWork(threading.Condition): … pass … Traceback (most recent call last): File “”, line 1, in TypeError: Error when calling the metaclass bases function() argument 1 must be code, […]

¿Metaclass Mixin o encadenamiento?

¿Es posible encadenar metaclases? Tengo un Model clase que usa __metaclass__=ModelBase para procesar su __metaclass__=ModelBase de espacio de nombres. Voy a heredar de él y “enlazar” otra metaclase para que no oculte el original. El primer acercamiento es a la class MyModelBase(ModelBase) subclase class MyModelBase(ModelBase) : MyModel(Model): __metaclass__ = MyModelBase # inherits from `ModelBase` ¿Pero […]

¿Usando el método __call__ de una metaclase en lugar de __nuevo__?

Al discutir las metaclases, los documentos establecen: Por supuesto, también puede anular otros métodos de clase (o agregar nuevos métodos); por ejemplo, la definición de un método __call__() en la metaclase permite un comportamiento personalizado cuando se llama a la clase, por ejemplo, no siempre creando una nueva instancia. Mis preguntas son: supongamos que quiero […]

Usar método de clase, no método de instancia con el mismo nombre

Tengo el siguiente fragmento de código: class Meta(type): def __getattr__(self, name): pass class Klass(object): __metaclass__ = Meta def get(self, arg): pass Ahora, si lo hago: kls = Klass() kls.get(‘arg’) Todo funciona como se espera (se llama el método de instancia get ). Pero si lo hago: Klass.get(‘arg’) de nuevo, se encuentra el método de instancia […]

Metaclase no se llama en subclases

Aquí hay una sesión de python. >>> class Z(type): def __new__(cls, name, bases, attrs): print cls print name return type(name, bases, attrs) … >>> class Y(object): __metaclass__ = Z … Y >>> class X(Y): … pass … >>> class W(Y): … __metaclass__ = Z … W >>> Después de definir la clase XI, espero que […]

La herencia triple causa conflicto de metaclase … A veces

Parece que me encontré con un infierno de metaclase, incluso cuando no quería tener nada que ver con eso. Estoy escribiendo una aplicación en Qt4 usando PySide. Quiero separar la parte controlada por eventos de la definición de la interfaz de usuario, que se genera a partir de archivos de Qt Designer. Por lo tanto, […]

Decorar un método de clase después de @property

Quiero envolver todos los métodos de varios objetos excepto __init__ usando un decorador. class MyObject(object): def method(self): print “method called on %s” % str(self) @property def result(self): return “Some derived property” def my_decorator(func): def _wrapped(*args, **kwargs): print “Calling decorated function %s” % func return func(*args, **kwargs) return _wrapped class WrappedObject(object): def __init__(self, cls): for attr, […]

¿Cómo crear una representación de cadena personalizada para un objeto de clase?

Considera esta clase: class foo(object): pass La representación de cadena predeterminada se parece a esto: >>> str(foo) “” ¿Cómo puedo hacer que esto muestre una cadena personalizada?

¿Hay una manera de establecer metaclase después de la definición de la clase?

Para establecer la metaclase de una clase, usamos el atributo __metaclass__ . Las metaclases se utilizan en el momento en que se define la clase, por lo que establecerla explícitamente después de que la definición de la clase no tenga efecto. Esto es lo que sucede cuando trato de establecer las metaclases explícitamente; >>> class […]