1. Disseny i ús de classes: classe Experiment (3 punts)

Per analitzar una determinada malaltia del cor s’estudia el comportament d’una cèl·lula a la que se li ha inoculat un fàrmac. En un experiment concret, es treballa amb 5 cèl·lules: a algunes d’elles se’ls inocula el fàrmac a una concentració (micromolar) i a la resta no se’ls inocula res (cèl·lules de control).

Implementeu al mòdul experiments (fitxer experiments.py) la classe Experiment que representa un experiment com el descrit.

L’especificació de la classe Experiment és la següent:

class experiments.Experiment(farmac)

Construeix una instància de la classe amb el nom del fàrmac donat.

Atributs

farmac

Nom del fàrmac inoculat (string)

Mètodes

medicacio()

Retorna el nombre de concentracions aplicades (concentracions diferents de 0).

Operacions

Operació

Resultat

exp[i]

Retorna la fracció (instància de la classe Fraction) corresponent a la concentració i-èssima de l’experiment exp. El valor i ha de satisfer 0 <= i < 5

exp[i]=t

Estableix que la concentració i-èssima de l’experiment és la fracció (instància de la classe Fraction) obtinguda a partir de t, que és un tuple de 2 elements corresponents al numerador i denominador de la fracció. El valor i ha de satisfer 0 <= i < 5

Implementació

A més dels atributs públics, la classe Experiment ha de tenir un atribut privat que representi les 5 concentracions del fàrmac en cadascuna de les 5 cèl·lules de l’experiment. Aquest atribut ha de ser una llista de 5 instàncies de la classe Fraction. Inicialment les instàncies són la fracció nul·la amb numerador = 0 i denominador = 1.

  1. Implementeu primer els mètodes __init__() i __getitem__() . El mètode __init__() ha d’inicialitzar l’atribut públic i l’atribut privat. El mètode __getitem__() ha de retornar la fracció indicada d’aquesta llista. Exemples:

    >>> e = Experiment ('Propanolol')
    >>> e.farmac
    'Propanolol'
    >>> e[0]
    Fraction(0, 1)
    >>> e[1]
    Fraction(0, 1)
    >>> e[2]
    Fraction(0, 1)
    >>> e[3]
    Fraction(0, 1)
    >>> e[4]
    Fraction(0, 1)
    

    Disposeu de jocs de proves al fitxer test-experiments-init-get.txt.

  2. A continuació implementeu el mètode __setitem__(). Cal tenir en compte que el paràmetre és un tuple però els elements de la llista de concentracions són fraccions (instàncies a la classe Fraction). Exemples:

    >>> e = Experiment ('Propanolol')
    >>> lconc = [(10, 1), (1, 5), (1, 1), (3, 10), (6, 10)]
    >>> for i, c in enumerate(lconc):
    ...    e[i] = c
    >>> e[1]
    Fraction(1, 5)
    >>> e[4]
    Fraction(3, 5)
    

    Disposeu dels jocs de proves al fitxer test-experiments-set.txt.

  3. Finalment, implementeu el mètode medicacio() que ha de retornar un enter: el nombre de cèl·lules de l’experiment que no són de control, és a dir les que tenen una concentració diferent de la fracció nul·la. Exemples:

>>> e1 = Experiment ('Fenoterol')
>>> e1[1] = (4, 5)
>>> e1[3] = (6, 3)
>>> e1.medicacio()
2

Disposeu dels jocs de proves al fitxer test-experiments-medicacio.txt.