2009-12-26 8 views

risposta

6

Fondamentalmente si dovrebbe usare b() come staticmethod in modo che si può chiamare sia dalla classe o oggetto della classe ad esempio:

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

Errore di sintassi. Prova a chiamarlo.

>>> 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) 

Consulta anche:

>>> 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

in un il metodo di classe self è l'istanza della classe in cui viene richiamato il metodo. attenzione che self non è una parola chiave in python solo un nome convenzionale dato al primo argomento di un metodo.

un'occhiata a questo esempio:

class A: 

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

    @staticmethod 
    def bar(s): 
     print s 

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

qui a è l'istanza della classe A. chiamando a.foo() dell'istanza a mentre A.foo(a) invoca il metodo foo nella classe A ma passando l'istanza a come primo argomento e sono esattamente la stessa cosa (ma non si utilizza mai il secondo modulo).

staticmethod è un decoratore che consente di definire un metodo di classe come statico. che la funzione non è più un metodo e il primo argomento non è l'istanza della classe, ma è esattamente il primo argomento è stato passato a questa funzione:

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. Non voglio disturbarti ma queste sono le basi di Python, the python tutorial è un buon inizio per i principianti.

Problemi correlati