Articles of sobrecarga

Python sobrecarga varias solicitudes getitems / index

Tengo una clase de Grid la que quiero acceder usando myGrid[1][2] . Sé que puedo sobrecargar el primer conjunto de corchetes con el método __getitem__() , pero ¿qué pasa con el segundo? Pensé que podría lograr esto al tener una clase de ayuda que también implementa __getitem__ y luego: class Grid: def __init__(self) self.list = […]

¿Se puede sobrecargar bin () como oct () y hex () en Python 2.6?

En Python 2.6 (y anteriormente), las funciones integradas hex() y oct() pueden sobrecargarse en una clase definiendo las funciones especiales __hex__ y __oct__ . Sin embargo, no hay una función especial __bin__ para sobrecargar el comportamiento de la nueva función incorporada bin() de Python 2.6. Quiero saber si hay alguna forma de sobrecargar de forma […]

Sobrecarga Python ‘en’ para devolver no bool

Estoy tratando de sobrecargar el operador in para que una clase devuelva un objeto que no sea bool, pero parece que se lanza de todos modos. Aquí está mi caso de uso: class Dataset(object): def __init__(self): self._filters = [] def filter(self, f): self._filters.append(f) return self class EqualFilter(object): def __init__(self, field, val): … class SubsetFilter(object): def […]

¿Hay una manera de sobrecargar + = en python?

Sé que el método __add__ para anular más, pero cuando lo uso para anular + =, __add__ con uno de dos problemas: (1) si __add__ muta a sí mismo, entonces z = x + y Mutaré x cuando realmente no quiero que x sea mutado allí. (2) si __add__ devuelve un nuevo objeto, entonces tmp […]

python: cambia la impresión de sys.stdout a la función de impresión personalizada

Estoy tratando de entender cómo crear una función de impresión personalizada. (usando python 2.7) import sys class CustomPrint(): def __init__(self): self.old_stdout=sys.stdout #save stdout def write(self, text): sys.stdout = self.old_stdout #restre normal stdout and print print ‘custom Print—>’ + text sys.stdout= self # make stdout use CustomPrint on next ‘print’ # this is the line that […]

Operador de sobrecarga () en Python

Estoy tratando de aprender curry en Python para mi clase y tengo que sobrecargar al operador () para ello. Sin embargo, no entiendo cómo puedo sobrecargar al operador (). ¿Puedes explicar la lógica detrás de la sobrecarga de los paréntesis? ¿Debo sobrecargar primero (y luego) o puedo hacer algo de esto? Además, ¿hay un nombre […]

sobrecarga de operadores para __truediv__ en python

Estoy tratando de implementar la sobrecarga para el operador de división en Python. class Fraction: def __init__(self,top,bottom): def gcd(m, n): while m % n != 0: old_m = m old_n = n m = old_n n = old_m % old_n return n common = gcd(top,bottom) self.num = top/common self.den = bottom/common def __str__ (self): return […]

¿Cómo sobrescribo delete () en un modelo y todavía funciona con eliminaciones relacionadas?

Tengo un problema porque estoy eliminando un Widget utilizando some_widget_instance.delete (). También tengo un modelo llamado WidgetFile con un método de eliminación de cancelación () para poder eliminar archivos de mi disco duro cuando se elimina un WidgetFile. El problema que tengo es que si elimino un Widget, y tiene WidgetFiles relacionados con esto como […]

Sobrecarga del operador en python con el objeto en el lado derecho del operador

Recientemente me enteré de la sobrecarga de operadores en python y me gustaría saber si es posible lo siguiente. Considere la siguiente clase hipotética / ideada. class My_Num(object): def __init__(self, val): self.val = val def __add__(self, other_num): if isinstance(other_num, My_Num): return self.val + other_num.val else: return self.val + other_num Sé que la forma en que […]

cómo “reimportar” el módulo a Python y luego cambiar el código después de la importación

Tengo un foo.py def foo(): print “test” En IPython utilizo: In [6]: import foo In [7]: foo.foo() test Entonces cambié el foo() a: def foo(): print “test changed” En IPython, el resultado para invocar sigue siendo la test : In [10]: import foo In [11]: foo.foo() test Luego uso: In [15]: del foo In [16]: […]