inicio y argumentos en Python
Quiero entender los argumentos del constructor __init__
en Python.
class Num:
def __init__(self,num):
self.n = num
def getn(self):
return self.n
def getone():
return 1
myObj = Num(3)
print myObj.getn()
RESULTADO: 3
Llamo al método getone()
:
print myObj.getone()
RESULTADO: El error 'getone()' no toma argumentos (1given).
Así que sustituyo:
def getone():
return 1
Con
def getone(self):
return 1
RESULTADO: 1 Esto está bien.
Pero el método getone()
no necesita argumentos.
¿Tengo que usar argumentos sin sentido?
5 answers
En Python:
-
Métodos de instancia: requieren el argumento
self
. - Métodos de clase: toma la clase como primer argumento.
-
Métodos estáticos: no requieren el argumento instance (
self
) o class (cls
).
__init__
es una función especial y sin primordial __new__
que siempre se le dará la instancia de la clase como su primer argumento.
Un ejemplo usando el classmethod incorporado y decoradores de método estadístico:
import sys
class Num:
max = sys.maxint
def __init__(self,num):
self.n = num
def getn(self):
return self.n
@staticmethod
def getone():
return 1
@classmethod
def getmax(cls):
return cls.max
myObj = Num(3)
# with the appropriate decorator these should work fine
myObj.getone()
myObj.getmax()
myObj.getn()
Dicho esto, trataría de usar @classmethod
/@staticmethod
con moderación. Si te encuentras creando objetos que consisten en nada más que staticmethod
s, lo más pitónico sería crear un nuevo módulo de funciones relacionadas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-25 04:05:29
Cada método necesita aceptar un argumento: La instancia en sí (o la clase si es un método estático).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-02 14:58:16
El hecho de que su método no use el argumento self
(que es una referencia a la instancia a la que se adjunta el método) no significa que pueda omitirlo. Siempre tiene que estar ahí, porque Python siempre va a intentar pasarlo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-02 15:01:21
En python siempre debe pasar al menos un argumento a los métodos de clase, el argumento es self
y no tiene sentido es una referencia a la instancia en sí
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-02 14:58:29
El objeto actual se pasa explícitamente al método como primer parámetro. self
es el nombre convencional. Puede llamarlo como quiera, pero se recomienda encarecidamente que se adhiera a esta convención para evitar confusiones.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-02 15:04:58