Curs de programació en Python usant Linux Cinquena part

Python és un llenguatge molt popular de programació.


En aquesta sèrie de post del curs de programació a Python usant Linux vam decidir provar amb un enfocament diferent. En lloc de començar amb els conceptes bàsics (els maons, per dir-ho d'alguna manera) comencem per l'edifici complet per després ocupar-nos de les parts.

En aquest cas l'edifici és el paradigma conegut com a Programació Orientada a Objectes. Per acabar amb aquesta part del curs analitzarem els conceptes claus del paradigma aplicats a la programació a Python. Recordeu que l'enllaç al post anterior està al final de l'article.

Curs de programació a Python usant Linux

Conceptes clau de la Programació Orientada a Objectes aplicats a Python

Classe

És la plantilla amb la qual es construeixen els objectes. S'ocupa de definir com serà un objecte i què pot fer. És una cosa així com una recepta de cuina. Es defineix amb l'ordre :

class Nombre_de_la_clase

Atributs

Són les característiques que descriuen un objecte. Actuen com a variables pertanyents exclusivament a la classe.

constructor

És un mètode especial que sexecuta en forma automàtica en crear un objecte, Sencarrega dinicialitzar els atributs del mateix.
Mètodes

Són funcions definides dins una classe que determinen el comportament de l'objecte.

herència

És la capacitat d'una classe de prendre les característiques i els comportaments d'altres que ja existeixen afegint i modificant el que ja existeixen. La classe de què es prenen les característiques s'anomena classe pare i la que el rep, amb una manca d'originalitat enorme, classe filla.

polimorfisme

Parlant de manca d'originalitat, aquesta característica vol dir que classes diferents poden tenir mètodes amb el mateix nom però amb comportaments diferents
Manejant fitxers a Python

Als exemples que proporcionem anteriorment, la informació s'incloïa dins del codi. Es tracta d'un mètode poc pràctic ja que cal modificar-lo cada cop que calgui afegir o esborrar una informació. Per sort, hi ha altres maneres de fer-ho com la lectura de les dades desitgi un arxiu.
Creem un fitxer de text simple amb el títol sistema.txt i el contingut

Ubuntu

26.04

Debian

Ara vegem el programa.

class Sistemas:
Definim una classe amb el nom Sistemes com havíem fet abans.
def __init__(self, nombre, version, derivada):
Iniciem el constructor automàtic que s´ocupa d´assignar els paràmetres.
self.nombre = nombre
self.version = version
self.derivada = derivada

Amb aquestes línies es guarden els atributs rebuts com a valors de l'objecte.
def mostrar_info(self):
Defineix la manera com es mostrés la informació dels atributs.
print(f"Nombre: {self.nombre}")
print(f"Versión: {self.version}")
print(f"Derivada: {self.derivada}")

Instruccions per imprimir a la pantalla els atributs de l'objecte. Les claus insereixen el valor de les variables dins del text.
with open("sistema.txt", "r") as archivo:
Aquesta ordre obre el fitxer en mode de lectura i el tanca una vegada que s'acaba el bloc
lineas = archivo.readlines()
Llegeix totes les línies d'un fitxer i les desa en una llista. Parlarem de les lsites en fitxers posteriors.
nombre = lineas[0].strip()
version = lineas[1].strip()
derivada = lineas[2].strip()

Accedeix a cada línia per la seva posició i elimina salts de línia i espais amb l'ordre strip.
sistema = Sistemas(nombre, version, derivada)
Crea una instància de l'objecte de la classe Sistemes amb els paràmetres que vau llegir del fitxer.
sistema.mostrar_info()
Truca al mètode encarregat d'imprimir a la pantalla
La funció open()

La funció open() ve predefinida dins de Python i requereix els paràmetres següents:

Dossier

És obligatori i indica al programa on cercar el fitxer. Si esteu dins de la mateixa carpeta del programa només s'indica el nom del fitxer i l'extensió. SI no cal també indicar la ruta d'on està emmagatzemada.
open("archivo.txt") Quan el fitxer és a la carpeta actual.
open("carpeta/archivo.txt") Quan el fitxer és dins d'una altra carpeta.
open("/home/usuario/archivo.txt") La carpeta s'indica dins de la carpeta personal d'un usuari específic.
open(3); S'indica un fitxer per l'identificador que us assigna el sistema operatiu.
manera
És un paràmetre opcional que indica la manera com es treballa amb el fitxer.

    • r: Mode de només lectura. Dóna error si el fitxer no va ser creat prèviament.

>w: Escriu el fitxer i el crea si no hi és. Esborra el contingut existent.

  • a: Crea el fitxer si no existeix. SI hi ha contingut escriu al final daquest.
  • x: Crea el fitxer. Dóna error si no existeix.
  • r+: Llegeix i escriu el fitxer, dóna error si no es creo prèviament.
  • w+: Llegeix i escriu el fitxer. Esborra el contingut existent.
  • a+: Llegeix i escriu al final del contingut.
  • t: És l'opció per defecte, treballa amb cadenes de text.
  • b: Treballa amb bytes. És ideal per al treball amb imatges o pdf.

memòria intermèdia

És el control de la memòria temporal abans d'escriure un fitxer. No cal especificar-ho, però en alguns casos pot ser rútil.

  • 0: Sense buffer, s'escriu directe a disc. Ideal per treballar amb la manera b.
  • 1; És la manera per defecte. Emmagatzema la dada carregada fins a trobar un salt de línia i llavors l'escriu a la variable. Només es fa servir en el mode de text.
  • =: Després d'igual s'estableix un valor en bytes per indicar la mida que ha de tenir el buffer.
  • -1: El sistema operatiu determina la mida del buffer.

alguns exemples

open("archivo.txt", buffering=0) No crea el buffer ja que estem treballant amb el mode binari.
open("archivo.txt", buffering=1) El buffer treballa amb salts de línia
open("archivo.txt", buffering=4096) Estableix un buffer de 4096 bytes
open("archivo.txt", buffering=-1) Utilitza el buffer per defecte del sistema operatiu.

codificació

Estableix la codificació de caràcters del projecte. Si no s'especifica, s'utilitza la del sistema.

errors

Un altre paràmetre opcional. Defineix què fer quan es troben errors de codificació.

  • Estricte: Indica un error quan el troba.
  • Ignora: Omet els caràcters que no es poden descodificar.
  • Reemplaça: Substituïu els caràcters no identificats per signes de pregunta.
  • backslashreplace: Substitueix els caràcters que ignora per la seqüència \xNN

Nova línia

Un altre paràmetre opcional però que pot ser útil quan es treballa amb fitxers generats per diferents sistemes operatius. Un salt de línia és un caràcter invisible que indica al sistema operatiu que va acabar una línia i comença la següent.

Continuarem desenvolupant aquest tema i explicant noves instruccions al proper article.

Programa a Python il·lustrant el concepte d'herència de classes
Article relacionat:
Curs de programació a Python amb Linux Part 4