I am having problems inheriting certain methods or attributes in subclasses of a given class. The problem arises when printing with the print
to check if everything works correctly. But it seems that you are not inheriting variables defined in the superclass. In this particular example, when I try to print some method that is going to be overwritten, it returns an error that some variables are not defined.
This would be my super class:
class Secuencia:
def __init__(self, secuencia):
self.__secuencia = secuencia
longitud = len(secuencia)
def __str__(self):
cadena = 'La secuencia es: {0}\n'.format(self.__secuencia)
cadena = cadena + 'La longitud de la secuencia es de: {0}\n'.format(len(self.__secuencia))
return cadena
def get_secuencia(self):
return self.__secuencia
def frecuencia_base(self):
pass
One of my subclasses would be this:
class DNA(Secuencia):
bases = {'A','T', 'C','G'}
bases_complementarias = {'A':'T', 'T':'A', 'C':'G','G':'C'}
def __init__(self, secuencia):
super().__init__(secuencia) #hereda "secuencia" de la superclase Secuencia por qué no puedo ponerla en el __str__ de DNA? o en el return del metodo frecuencia_base
self.__longitud = len(secuencia)
bases = {'A','T','C','G'}
secuencia_set = set(secuencia)
if secuencia_set <= bases: #comprobacion de que es de DNA
print('Ha introducido una secuencia de DNA', secuencia, 'de longitud', len(secuencia))
else: #En caso contrario generamos un mensaje de error y generamos un tipo de error nuevo.
print('Secuencia de DNA INCORRECTA')
raise NameError('errorSecuencia') #tipo de error generado.
def frecuencia_base(self):
A = 0
T = 0
C = 0
G = 0
for base in secuencia:
if base == 'A':
A += 1
elif base == 'T':
T += 1
elif base == 'C':
C +=1
elif base == 'G':
G +=1
return El contenido de bases es:\n A: {}\n T:{}\n C: {}\n G: {}'.format(A, T, C, G)
def __str__(self):
contenido = 'El contenido de bases es:\n A: {}\n T:{}\n C: {}\n G: {}'.format(A, T, C, G)
return contenido
At the time of doing the .base_frequency (). I get an error of which sequence is not defined but it is supposed to have been inherited from the superclass no? Or I do not have to declare a new str in the subclass to be able to print with print