4

Python でクラスのタグ (ctags 5.8) ファイルを作成したいと考えています。ただし、コンストラクター ( self.x=2 ) でデータ メンバーを定義すると、ctags の完了が表示されません。

class A(object):

    def __init__(self):
        self.x = "whatever"    # x will not seen in ctags/omnicompletion!!!

私は間違っていますか?omn​​icompletion がないのはなぜですか (ctags ファイルは正常に見えます)。

4

1 に答える 1

1

あなたの問題を正しく理解していれば、いつでもクラス定義に属性を追加できます。

class A(object):

    x = None

    def __init__(self):
        self.x = whatever

このようにして、コードを読んでいるすべての人が、クラスが持つ属性 (「クラス メンバー」と呼んでいます) を確認できます。

更新:で確認

$ ctags --version
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 18 2011, 10:38:14

結果のタグ ファイルは次のようになります。

!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.9~svn20110310 //
A       aaa.py  /^class A(object):$/;"  c
__init__        aaa.py  /^   def __init__(self, x):$/;" m       class:A
x       aaa.py  /^   x = None$/;"       v       class:A

ご覧のとおり、xattribute には独自のレコードがあります。

最初にemacs互換のタグファイルを作成して、Emacsでもチェックします。

ctags -e aaa.py  # where aaa.py - file with code snippet above

(これでTAGSファイルが作成されました)

Emacs の内部:

M-. x   (enter)
~/TAGS   (enter)

...そして出来上がり!カーソルはx = None行にあります。

また、元のスニペットは機能しません。したがって、クラスの名前空間で属性を初期化するという私のアドバイスは有効です。

于 2012-01-22T13:51:37.997 に答える