extraer - ¿Puedo agregar métodos/atributos personalizados a los tipos de Python incorporados?
extraer datos de un xml python (3)
No puede agregar directamente el método al tipo original. Sin embargo, puede subclase el tipo y luego sustituirlo en el espacio de nombres integrado / global, que logra la mayor parte del efecto deseado. Desafortunadamente, los objetos creados por sintaxis literal continuarán siendo de tipo vainilla y no tendrán sus nuevos métodos / atributos.
Esto es lo que parece
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] + self[-1]
else:
return ''''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print str(1234).first_last()
print str(0).first_last()
print str('''').first_last()
print ''0''.first_last()
output = """
14
00
Traceback (most recent call last):
File "strp.py", line 16, in <module>
print ''0''.first_last()
AttributeError: ''str'' object has no attribute ''first_last''
"""
Por ejemplo, digamos que quiero agregar un método helloWorld()
al tipo dict de Python. ¿Puedo hacer esto?
JavaScript tiene un objeto prototipo que se comporta de esta manera. Tal vez es un mal diseño y debería subclasificar el objeto dict, pero solo funciona en las subclases y quiero que funcione en todos los diccionarios futuros.
Así es como iría en JavaScript:
String.prototype.hello = function() {
alert("Hello, " + this + "!");
}
"Jed".hello() //alerts "Hello, Jed!"
Aquí hay un enlace útil con más ejemplos: http://www.javascriptkit.com/javatutors/proto3.shtml
Sí, subclasificando esos tipos. Ver unificar tipos y clases en Python .
No, esto no significa que los dicts reales tengan este tipo, porque eso sería confuso. La subclase de un tipo integrado es la forma preferida de agregar funcionalidad.
Subclases es el camino a seguir en Python. Los programadores de Polyglot aprenden a usar la herramienta correcta para la situación correcta, dentro de lo razonable. Algo tan hábilmente construido como Rails (un DSL que usa Ruby) es muy difícil de implementar en un lenguaje con una sintaxis más rígida como Python. La gente a menudo compara los dos diciendo lo similares que son. La comparación es algo injusta. Python brilla a su manera. totochto.