[ Foro de Python ]

__init__

23-Mar-2017 19:41
Invitado (Eduardo)
1 Respuestas

Hola a todos! alguien podría por favor darme una mano con lo siguiente:

En este ejemplo (clases built-in de Biopython) se pueden poner argumentos (por ejemplo "AGTACACTGGT") dentro del paréntesis al instaciar la clase y crear el objeto:

>>>from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> my_seq
Seq('AGTACACTGGT', Alphabet())


Pero en este ejemplo que yo he creado:

archivo 1: porcentajeGC.py
class porcentajeGC:

   def contadorGC (self,genome):
     c=genome.count("C")
     g=genome.count("G")
     totalGC= (g+c/float(len(genome)))

     return totalGC


archivo 2:
from porcentajeGC import porcentajeGC

genome="ATCGATCGATC"
obj=porcentajeGC()
print(obj.contadorGC(genome))
print (len(genome))


si intento poner argumentos al instanciar la clase y crear el objeto:
#genome="ATCGATCGATC" (comento esta línea)
obj=porcentajeGC("ATCGATCGATC")

el resultado es: TypeError: this constructor takes no arguments


y si intento ejecutar en consola:
>>> from Bio.Seq import Seq
>>> obj=Seq()
es decir instanciar la clase sin argumentos me aparece el error:

TypeError: __init__() takes at least 2 arguments (1 given)

¿Por qué se pueden poner argumentos al instanciar en algunos ejemplos y en el que yo he creado no puedo?
y ¿por qué no puedo instanciar la clase sin argumentos ( como en mi ejemplo ) en otros casos?
He estado leyendo sobre __init__ pero ya en la práctica no lo tengo claro.


Ojalá haya sido explícito para facilitar una posible ayuda de vosotros.

Muchas gracias de antemano si alguien puede ayudarme con esto.

Un saludo a todos!!


02-Apr-2017 12:20
Nacho Cabanes (+31)

Es una cuestión de cómo están diseñadas las clases que estás empleando. Si están diseñadas para recibir parámetros y no para funcionar sin ellos... pues no podrás hacerlas funcionar sin esos parámetros. Tendrás que obtener antes los datos que necesiten tus objetos para ser inicializados, y así podrás llamarlo indicando los parámetros que el diseñador ha considerado que deberían ser imprescindibles.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)