Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
script:python [2011/09/26 09:03] alfred |
script:python [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 48: | Línea 48: | ||
| ===== Orientado a objetos ===== | ===== Orientado a objetos ===== | ||
| ==== Clases ==== | ==== Clases ==== | ||
| - | * Definimos una clase como: ''class <nombre>:'' | + | |
| - | * Siempre, a cada método de la clase, debemos pasar como primer argumento la palabra 'self', que corresponde a sí mismo, algo así como el this de otros lenguajes. | + | |
| - | * Las propiedades de la clase son definidas mediante el self dentro de la clase. Esto es, si definimos algo así: self.prop = 4, luego podremos hacer <objeto>.prop, pero si no lo hemos definido esto nos dará error. Es cuando la definimos cuando se crea. | + | |
| - | * El método constructor por defecto en una clase sería: | + | |
| - | <code python> | + | |
| - | def __init__ (self) | + | |
| - | </code> | + | |
| - | * Para crear un objeto haríamos: <nombre> = <clase>() | + | |
| - | * Ejemplo de definición de una clase: | + | |
| - | <code python> | + | |
| - | class cPrueba: | + | |
| - | def __init__ (self): | + | |
| - | print "constructor" | + | |
| - | def method (self): | + | |
| - | print "metodo" | + | |
| - | def params (self, num): | + | |
| - | print num | + | |
| - | </code> | + | |
| - | * Ejemplo de llamadas: | + | |
| - | <code python> | + | |
| - | c = cPrueba () # constructor | + | |
| - | c.method() # metodo | + | |
| - | c.params(33) # 33 | + | |
| - | </code> | + | |
| * Para tener constructores con argumentos estos han de tener un valor por defecto, sino no furrulará: | * Para tener constructores con argumentos estos han de tener un valor por defecto, sino no furrulará: | ||
| <code python> | <code python> | ||
| Línea 91: | Línea 68: | ||
| * <del>El orden de llamada a los constructores en las clases que participan en la herencia es el de siempre: primero el de la base y luego el de las heredadas.</del> MENTIRA!!, has de llamarlos tú: <nowiki>nombreBase.__init__(self))</nowiki> | * <del>El orden de llamada a los constructores en las clases que participan en la herencia es el de siempre: primero el de la base y luego el de las heredadas.</del> MENTIRA!!, has de llamarlos tú: <nowiki>nombreBase.__init__(self))</nowiki> | ||
| * Para acceder a la clase base de una derivada desde esta, no tenemos que hacer más que <NombreClaseBase>.<NombreMetodo> | * Para acceder a la clase base de una derivada desde esta, no tenemos que hacer más que <NombreClaseBase>.<NombreMetodo> | ||
| - | * Un método curioso, que haría como el .toString() de Java, sería el ''<nowiki>__str__</nowiki>''. Si en una clase definimos este método, cuando dicha clase se use como string devolverá lo que retorne dicho método: | + | |
| - | <code python> | + | |
| - | class cClase: | + | |
| - | ... | + | |
| - | def __str__ (self): | + | |
| - | return "hola" | + | |
| - | ... | + | |
| - | obj = cClase() | + | |
| - | print obj # hola | + | |
| - | </code> | + | |
| - | * Otro método es el de la documentación (''<nowiki>__doc__</nowiki>''), para redefinir este no tenemos que reescribir nada, únicamente debemos, después del nombre de clase, insertar un string, este será su documentación: | + | |
| - | <code python> | + | |
| - | class cHi: | + | |
| - | "Clase de prueba" | + | |
| - | nombre = "" | + | |
| - | + | ||
| - | x = cHi() | + | |
| - | x.nombre = "Pepe" | + | |
| - | print x.nombre # Pepe | + | |
| - | print x.__doc__ # Clase de prueba | + | |
| - | </code> | + | |
| === Notas de clases === | === Notas de clases === | ||
| * Si metes una propiedad dentro de una clase, le das un valor, creas objetos y luego la cambias. Esa propiedad será cambiada para todos los objetos. | * Si metes una propiedad dentro de una clase, le das un valor, creas objetos y luego la cambias. Esa propiedad será cambiada para todos los objetos. | ||