61 
sage.rings.integer.Integer?<tab>
Esta información indica que sage.rings.integer.Integer es realmente una clase que es capaz de 
crear objetos enteros. También, si se colocan 2 signos de interrogación ‘??’ después de un 
nombre de clase y de ahí se presiona la tecla tab, el código fuente de la clase será mostrado. 
Ahora en una celda separada escriba x y presione la tecla tab: 
C# convert pdf to text file - Library application class:C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net, ASP.NET MVC, WinForms, WPF application
C# PDF to Text (TXT) Converting Library to Convert PDF to Text
www.rasteredge.com
C# convert pdf to text file - Library application class:VB.NET PDF Convert to Text SDK: Convert PDF to txt files in vb.net, ASP.NET MVC, WinForms, WPF application
VB.NET Guide and Sample Codes to Convert PDF to Text in .NET Project
www.rasteredge.com
62 
Una ventana gris será mostrada, la cual contiene todos los métodos que contiene el objeto. Si 
cualquiera de estos métodos es seleccionado con el cursor del ratón, su nombre será colocado en 
la celda después del operador punto como comodidad. Por ahora, seleccione el método is_prime. 
Cuando su nombre sea colocado en la celda, escriba un signo de interrogación y presione la tecla 
tab para obtener información de este método: 
La sección Definition indica que el método is_prime() es llamado sin pasar ningún argumento a 
el y la sección Docstring indica que el método será verdadero si el objeto es primo. El siguiente 
código muestra la variable x (que todavía vale 5) siendo usada para llamar al método is_prime: 
x.is_prime() 
True
4.8 Los métodos de los objetos de la lista 
Las listas son objetos y por lo tanto contienen métodos que proveen capacidades útiles: 
a = [] 
a.<tab>
Library application class:C# PDF Text Extract Library: extract text content from PDF file in
How to C#: Extract Text Content from PDF File. Add necessary references: RasterEdge.Imaging.Basic.dll. RasterEdge.Imaging.Basic.Codec.dll.
www.rasteredge.com
Library application class:C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
In the following example, this C#.NET PDF to JPEG converter library will name the converted JPEG image file Output.jpg. Convert PDF to JPEG Using C#.NET.
www.rasteredge.com
63 
Los siguientes programas demuestran algunos de los métodos de los objetos de una lista: 
#  Añadir un objeto al final de una lista. 
a = [1,2,3,4,5,6] 
print a 
a.append(7) 
print a 
[1, 2, 3, 4, 5, 6] 
[1, 2, 3, 4, 5, 6, 7] 
# Insertar un objeto a una lista. 
a = [1,2,4,5] 
print a 
a.insert(2,3) 
print a 
[1, 2, 4, 5] 
[1, 2, 3, 4, 5] 
# Clasificar los contenidos de una lista. 
a = [8,2,7,1,6,4] 
print a 
a.sort() 
print a 
[8, 2, 7, 1, 6, 4] 
[1, 2, 4, 6, 7, 8] 
4.9 Extendiendo las clases con herencias. 
Las tecnologías de objetos son sutiles y poderosas. Poseen un gran número de mecanismos para 
tratar con casos complejos y las herencias de clase es uno de ellos. La herencia de clase es la 
habilidad de una clase de obtener o heredar todas las variables de instancia y métodos de otra 
clase (llamada clase parental, super clase, o clase base) utilizando una cantidad mínima de 
código. Una clase que hereda o sucede de una clase parental es llamada clase hija o sub clase. 
Esto significa que una clase hija puede hacer todo lo que hace su clase padre junto con otra 
funcionalidad adicional que es programada en la hija. 
El siguiente programa demuestra la herencia de clases dejando que una clase Persona herede 
información de la clase construida en la clase objeto y a la vez que la clase ArmyPrivate lo 
haga de la clase Persona: 
Library application class:C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
it extremely easy for C# developers to convert and transform The HTML document file, converted by C#.NET PDF style that are included in target PDF document file
www.rasteredge.com
Library application class:C# PDF File Split Library: Split, seperate PDF into multiple files
C#.NET control for splitting PDF file into two or multiple files online. This is an C# example of splitting a PDF file into multiple ones by number of pages.
www.rasteredge.com
64 
class Persona(object): 
def __init__(self): 
rank.prop = "Solo soy una persona, no tengo rango." 
def __str__(self): 
return "str: " + rank.prop 
def __repr__(self): 
return "repr: " + rank.prop 
class Soldado(Persona): 
def __init__(self): 
rank.prop = "Soldado." 
a = object() 
print type(a) 
b = Persona() 
print type(b) 
c = Soldado() 
print type(c) 
<type 'object'> 
<class '__main__.Person'> 
<class '__main__.ArmyPrivate'>
Después de que las clases han sido creadas, este programa ejecuta un objeto del tipo objeto el 
cual es asignado a la variable ‘a’, un objeto del tipo Persona que es asignado a la variable ‘b’, y 
un objeto del tipo ArmyPrivate el cual es asignado a la variable ‘c’. 
El siguiente código puede ser utilizado para desplegar la jerarquía de ejecución de cada objeto. Si 
es ejecutado en una celda separada después de que el programa de arriba ha sido ejecutado, se 
muestra la jerarquía de la clase ArmyPrivate (Por el momento no es necesario preocuparse por 
entender como funciona este código. Solo usémoslo.
#Desplegar la jerarquía de la herencia de un objeto. Nota: no te preocupes 
#por entender como funciona este programa. Solo úsalo por 
#ahora 
def class_hierarchy(cls, indent):
print '.'*indent, cls 
for supercls in cls.__bases__: 
class_hierarchy(supercls, indent+1) 
def instance_hierarchy(inst): 
print 'Inheritance hierarchy of', inst 
class_hierarchy(inst.__class__, 3) 
z = Soldado() 
instance_hierarchy(z) 
Inheritance hierarchy of str: Soldado 
... <class '__main__.Soldado'> 
.... <class '__main__.Persona'> 
..... <type 'object'>
Library application class:C# PDF File Compress Library: Compress reduce PDF size in C#.net
Hidden layer content. Convert smooth lines to curves. Detect and merge image fragments. Flatten visible layers. C#.NET DLLs: Compress PDF Document.
www.rasteredge.com
Library application class:C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
C#.NET PDF SDK - Convert PDF to TIFF in C#.NET. Online C# Tutorial for How to Convert PDF File to Tiff Image File with .NET XDoc.PDF Control in C#.NET Class.
www.rasteredge.com
65 
La función instance_hierarchy mostrará la jerarquía de herencia de cualquier objeto que sea 
pasado a ella. En este caso, un objeto ArmyPrivate fue ejecutado y pasado a la función 
instance_hierarchy y la jerarquía de herencia del objeto fue mostrada. Note que la clase de la 
parte mas alta de la jerarquía, que es la clase objeto, fue escrita al final y que Persona hereda de 
objeto y ArmyPrivate hereda de Persona. 
4.10 La clase object, la función dir() y los métodos incorporados. 
La clase object esta incorporada en SAGE y contiene un pequeño numero de métodos útiles. 
Estos métodos son tan útiles que varias clases en SAGE los heredan de la clase object ya sea 1) 
Directamente o 2) Indirectamente heredándolo de una clase que lo heredo de la clase object. 
Comencemos nuestra discusión del programa de herencias observando los métodos que están 
incluidos en la clase object. La función dir() enlista todos los atributos de un objeto (que son sus 
variables de ejecución y sus métodos) y podemos usarla para ver cuales métodos contiene un 
objeto del tipo object: 
dir(a) 
['__class__', '__delattr__', '__doc__', 
'__getattribute__','__hash__','__init__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__','__setattr__', '__str__']
Los nombres que inician y terminan con doble guion bajo ‘__’ son parte de SAGE y los guiones 
ayudan a evitar que estos nombres hagan conflicto con los nombres definidos por el programador. 
La clase Persona hereda todos estos atributos de la clase object, pero solo utiliza algunos de ellos. 
Cuando un método es heredado de una clase parental, la clase hija puede utilizar la 
implementación de ese método como la clase parental o puede redefinirla para que se comporte 
diferente a la versión original. 
Como se menciono anteriormente, el método __init__ es un constructor y ayuda a completar la 
construcción de cada objeto nuevo que es creado utilizando la clase en la que esta. La clase 
Persona redefine el método __init__ para que cree una variable de ejecución llamada rango y le 
asigna la cadena “Solo soy una persona, no tengo rango” a ella. 
Los métodos __repr__ y __str__ son también redefinidos en la clase Persona. El método 
__repr__ muestra una representación de la cadena del objeto del cual es parte: 
repr: Solo soy una persona, no tengo rango.
Library application class:C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
PDF page deleting, PDF document splitting, PDF page reordering and PDF page image and text extraction. Remarkably, all those C#.NET PDF document page
www.rasteredge.com
Library application class:C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
Quick to remove watermark and save PDF text, image, table for batch converting PDF documents in C#.NET program. Convert PDF to multiple MS Word formats such as
www.rasteredge.com
66 
La función __str__ también muestra una representación de la cadena del objeto del cual es parte, 
pero solo cuando se pasa a instrucciones como print: 
print b 
str: I am just a Person, I have no rank.
El método __str__ es usualmente empleado para proveer una cadena mas amigable al usuario 
que el método __repr__ pero en este ejemplo, son mostradas cadenas muy parecidas. 
4.11 La jerarquía de herencia de la clase sage.ring.integer.Integer 
El siguiente código muestra la jerarquía de herencia de la clase sage.rings.integer.Integer: 
#Despliegue de la jerarquía de herencia de un objeto. Nota: no te preocupes 
#por tratar de entender como funciona el programa. Solo úsalo por  
#ahora. 
def class_hierarchy(cls, indent): 
print '.'*indent, cls 
for supercls in cls.__bases__: 
class_hierarchy(supercls, indent+1) 
def instance_hierarchy(inst): 
print 'Jerarquía de herencia de', inst 
class_hierarchy(inst.__class__, 3) 
instance_hierarchy(1) 
|
Jerarquía de herencia de 1 
... <type 'sage.rings.integer.Integer'> 
.... <type 'sage.structure.element.EuclideanDomainElement'> 
..... <type 'sage.structure.element.PrincipalIdealDomainElement'> 
...... <type 'sage.structure.element.DedekindDomainElement'> 
....... <type 'sage.structure.element.IntegralDomainElement'> 
........ <type 'sage.structure.element.CommutativeRingElement'> 
......... <type 'sage.structure.element.RingElement'> 
.......... <type 'sage.structure.element.ModuleElement'> 
........... <type 'sage.structure.element.Element'> 
............ <type 'sage.structure.sage_object.SAGEObject'> 
............. <type 'object'>
En la siguiente explicación, se harán a un lado la parte inicial “sage.xxx.xxx…” de los nombres 
de clase para ahorrar espacio. La salida de la función instance_hierarchy indica que el número 1 
es un objeto del tipo Integer (entero). Posteriormente muestra que Integer es heredero de 
EuclideanDomainElement, el cual es heredero de PrincipalIdealDomainElement, etc. En la 
cima de la jerarquía (que es hasta el fondo de la lista) SAGEObject es heredero de object. 
67 
Aquí esta una jerarquía de herencia de otros 2 objetos de SAGE comúnmente usados: 
instancehierarchy(1/2) 
Inheritance hierarchy of 1/2 
... <type 'sage.rings.rational.Rational'> 
.... <type 'sage.structure.element.FieldElement'> 
..... <type 'sage.structure.element.CommutativeRingElement'> 
...... <type 'sage.structure.element.RingElement'> 
....... <type 'sage.structure.element.ModuleElement'> 
........ <type 'sage.structure.element.Element'> 
......... <type 'sage.structure.sage_object.SAGEObject'> 
.......... <type 'object'>
instancehierarchy(1.2) 
Inheritance hierarchy of 1.20000000000000 
... <type 'sage.rings.real_mpfr.RealNumber'> 
.... <type 'sage.structure.element.RingElement'> 
..... <type 'sage.structure.element.ModuleElement'> 
...... <type 'sage.structure.element.Element'> 
....... <type 'sage.structure.sage_object.SAGEObject'> 
........ <type 'object'>
4.12 La relación “Is A”- (Es) 
Otro aspecto del concepto de herencia es que, puesto que una clase hija puede hacer todo lo que 
su padre puede hacer, puede ser usada en cualquier lugar en el cual su objeto padre puede ser 
usada. Observando la jerarquía de herencia de la clase Integer. Esta jerarquía indica que Integer 
es EuclideanDomainElement y EuclideanDomainElement es PrincipalIdealDomainElement 
PrincipalIdealDomainElement es DedekindDomainElement etc. hasta que finalmente 
SAGEObject es object (Justo como si casi todas las otras clases están en SAGE puesto que el la 
clase object es la clase raíz de la cual todas las demás descienden). Una forma más general de 
verlo es diciendo que una clase hija puede ser utilizada en cualquier lugar en donde sus clases 
antepasadas se usan. 
4.13 ¿Confundido? 
Este capitulo probablemente fue confuso pero nuevamente, no hay que preocuparse. El resto de 
este libro contendrá ejemplos que muestran como los objetos son usados en SAGE y mientas 
mas objetos siendo usados se vean, mas fácil será entenderlos. 
68 
5 Temas variados 
5.1 Referenciando el resultado de la operación anterior 
Cuando se trabaja en un problema que despliega múltiples celdas en una hoja de trabajo, 
comúnmente es deseable referenciar el resultado de la operación anterior. El símbolo de guión 
bajo ‘_’ es usado para este propósito como se muestra en el siguiente ejemplo: 
2 + 3 
_ + 6 
11 
a = _ * 2 
22 
5.2 Excepciones  
Con el fin de asegurar que los programas de SAGE tengan una forma uniforme para manejar 
condiciones excepcionales que podrían ocurrir mientras estos se están ejecutando, un despliegue 
de excepciones y un mecanismo para manejarlas esta integrado en la plataforma SAGE. Esta 
sección cubre solamente las excepciones mostradas debido a que su manejo es un tópico 
avanzado que esta más allá del alcance de este documento. 
El siguiente código provoca una excepción y es mostrada la información de esta: 
1/0 
Exception (click to the left for traceback): 
... 
ZeroDivisionError: Rational division by zero 
Como 1/0 es una operación matemática indefinida, SAGE es incapaz de realizar el cálculo. 
Detiene la ejecución del programa y genera una excepción para informar a otras aéreas del 
programa o al usuario sobre este problema. Si ninguna otra parte del programa maneja la 
excepción, se mostrará una explicación textual de la excepción. En este caso la excepción 
informa al usuario que ha ocurrido una excepción del tipo ZeroDivisionError, y esta fue causada 
por intentar realizar una división racional entre cero. 
69 
La mayor parte del tiempo, esta es información suficiente para que el usuario localice el 
problema en el código fuente y lo arregle. Sin embargo, algunas veces, el usuario necesita mas 
información para localizar el problema y por eso la excepción indica que si se realiza un click 
con el puntero del mouse al lado izquierdo del texto de la excepción mostrada, se desplegara 
información adicional: 
Traceback (most recent call last): 
File "", line 1, in 
File "/home/sage/sage_notebook/worksheets/tkosan/2/code/2.py", 
line 4, in 
Integer(1)/Integer(0) 
File "/opt/sage-2.8.3-linux-32bit-debian-4.0-i686- 
Linux/data/extcode/sage/", line 1, in 
File "element.pyx", line 1471, in element.RingElement.__div__ 
File "element.pyx", line 1485, in element.RingElement._div_c 
File "integer.pyx", line 735, in integer.Integer._div_c_impl 
File "integer_ring.pyx", line 185, in 
integer_ring.IntegerRing_class._div 
ZeroDivisionError: Rational division by zero 
Esta información adicional muestra una pista de todo el código en la librería de SAGE que estaba 
en uso cuando ocurrió la excepción junto con los nombres de los archivos que tenían el código. 
A un usuario experto de SAGE le permite ver el código fuente si es necesario con el fin de 
determinar si la excepción fue causada por un error (BUG) en SAGE o un error en el código 
introducido. 
5.3 Obteniendo resultados numéricos 
Algunas veces uno necesita obtener la aproximación numérica de un objeto y SAGE provee 
varias formas para lograr esto. Una manera es utilizar la función n() y otra forma es utilizando el 
método n(). El siguiente ejemplo muestra a ambos de estos en uso: 
a = 3/4 
print a 
print n(a) 
print a.n() 
3/4 
0.750000000000000 
0.750000000000000 
70 
El número de dígitos mostrados puede ser ajustado utilizando el parámetro digits
a = 3/4 
print a.n(digits=30) 
0.7500000000000000000000000000000 
Y el número de bits de precisión puede ser ajustado utilizando el parámetro prec: 
a = 4/3 
print a.n(prec=2) 
print a.n(prec=3) 
print a.n(prec=4) 
print a.n(prec=10) 
print a.n(prec=20) 
1.5 
1.2 
1.4 
1.3 
1.3333 
5.4 Guía de estilos para expresiones 
Siempre hay que rodear los siguientes operadores binarios con un espacio sencillo en cualquiera 
de los 2 lados: asignación ‘=’, asignación aumentada (+ =, - =, etc), comparaciónes( = =, <, >, ¡ 
=, < >, < =, > =, in, not in, is, is not), Booleanas (and, or, not). 
Usar espacios alrededor de los operadores aritméticos + y  -, y sin espacios en los operadores *, /, 
% y ^: 
x = x + 1 
x = x*3 
− 5%2
c = (a + b)/(a 
− b)
No utilizar espacios alrededor del signo ‘=’ cuando este es usado para indicar un valor 
predefinido de parámetro: 
a.n(digits=5) 
Documents you may be interested
Documents you may be interested