2009-12-26 10 views

Respuesta

6

Básicamente se debe utilizar b() como métodoestático de manera que se puede llamar así, ya sea de la clase o de objetos de la clase, por ejemplo:

bash-3.2$ python 
Python 2.6 (trunk:66714:66715M, Oct 1 2008, 18:36:04) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> class a: 
... @staticmethod 
... def b(): 
...  return 1 
... 
>>> a_obj = a() 
>>> print a.b() 
1 
>>> print a_obj.b() 
1 
>>> 
4

error de sintaxis. Intenta llamarlo.

>>> class a: 
...  def b(): 
...    return 1 
... 
>>> x=a() 
>>> x.b() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: b() takes no arguments (1 given) 

Consulte también:

>>> class a: 
...  def b(): 
...    return 1 
...  def c(self): 
...    return b() 
... 
>>> a().c() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 5, in c 
NameError: global name 'b' is not defined 
1

en una el método de clase self es la instancia de la clase a la que se llama el método. tenga en cuenta que self no es una palabra clave en python simplemente un nombre convencional dado al primer argumento de un método.

vistazo a este ejemplo:

class A: 

    def foo(self): 
     print "I'm a.foo" 

    @staticmethod 
    def bar(s): 
     print s 

a = A() 
a.foo() 
A.foo(a) 

aquí a es la instancia de la clase A. llamando a.foo() está invocando el método foo de la instancia a mientras A.foo(a)foo invocar el método en la clase A pero pasando la instancia a como primer argumento y son exactamente lo mismo (pero nunca usa la segunda forma).

staticmethod es un decorador que le permite definir un método de clase como estático. esa función no es más un método y el primer argumento no es la instancia de la clase, pero es exactamente el primer argumento que ha pasado en esa función:

a.bar("i'm a static method") 
i'm a static method 
A.bar("i'm a static method too") 
i'm a static method too 

PS. No quiero molestarte pero esta es la base de Python, the python tutorial es un buen comienzo para los principiantes.

Cuestiones relacionadas