staticmethod が not callable だと怒られる現象に悩む

静的メソッドを定義し、そのメソッドをそのクラスの中で使用しようとしたら staticmethod が callable でないと怒られた。

>>> class Karhu(object):
...     @staticmethod
...     def test():
...         return "test"
...     x = test()        # ... (1)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 5, in Karhu
TypeError: 'staticmethod' object is not callable

(1) を入力し終わったときではなく、class の定義が終わったときにエラーが出る。(1) の行を除くとエラーは起きない。
デコレータ staticmethod が callable じゃない、っていうエラーメッセージは違っているんじゃないかと思うが、どうなんだろう。

x = test() を x = Karhu.test() とクラス名で修飾するようにしてみたら怒られなくなった。うーむ。(Karhu.test() がエラーにならなかったのは、すでに定義されていた Karhu クラスがあるからだった。一旦 del Karhu してから実行したら Karhu.test() は "Karhu" が not defined だと怒られた。)
似たような例だが、自分で作った関数をデコレータにした場合は、クラス名を付けなくてもエラーは出ない。

def deco(func):
    print "deco"
    return func

class Karhu(object):
    print "karhu 1"
    @deco                # ... (2)
    def process():
        print "process"
        return "test"

    print "karhu 2"
    x = process()        # .... (3)
    print "karhu 3"

if __name__ == "__main__":
    print "main"
    print Karhu().x

実行すると、

[takeyuki@sunya ~]$ python karhu.py
karhu 1
deco
karhu 2
process
karhu 3
main
test

となる。クラス定義の途中、"karhu 1" と "karhu 2" の間でデコレータ deco が呼ばれている様子がわかる。さらにそのデコレータで修飾された関数 process() の呼出しがクラス定義の途中、"karhu 2" と "karhu 3" の間で行われているのもわかる。
で、この karhu.py の (2) を @staticmethod にするとまた callable じゃないと怒られる。

よくわからないなあ。

追記

先の karhu.py で (3) の位置に print process を入れてみると、

<function process at 0xb7e99ed4>

を得る。一方、(2) を @staticmethod に差し替えた場合は

<staticmethod object at 0xb7f4c314>

になる。ここが違いか。function オブジェクトは callable だけど、staticmethod オブジェクト自体は callable じゃないんだ。でもって、クラス定義の外から静的メソッドを見たらどうなるかというと ...

>>> class Karhu(object):
...     @staticmethod
...     def test():
...         return "test"
... 
>>> Karhu.test
<function test at 0xb7ec2c34>

なるほど function になるんだ。