本当に簡単wordsです。含まれているクラス インスタンスの名前nltk.corpus、関連するコードは次のとおりです。
words = LazyCorpusLoader('words', WordListCorpusReader, r'(?!README|\.).*')
これが言っているのは、それwordsが のインスタンスであるということだけですLazyCorpusLoader。
だからあなたはnltk.corpus.wordsそれへの参照として取得します。
ちょっと待って!
のコードを見ると、もLazyCorpusLoader呼び出します。LazyCorpusLoaderWordListCorpusReader
WordListCorpusReaderという名前のメソッドがありwords、次のようになります。
def words(self, fileids=None):
return line_tokenize(self.raw(fileids))
そしてLazyCorpusLoader、これを行いますcorpus = self.__reader_cls(root, *self.__args, **self.__kwargs)
基本的に、それが行うのは(独自のwordsメソッドを持つ)self.__reader__clsのインスタンスを作成することです。WordListCorpusReader
次に、これを行います。
self.__dict__ = corpus.__dict__
self.__class__ = corpus.__class__
Python docs によると__dict__ is the module’s namespace as a dictionary object。したがって、名前空間を の名前空間に変更していますcorpus。同様に__class__、ドキュメントでは と言う__class__ is the instance’s classので、クラスも変更されます。そのnltk.corpus.words.wordsため、 という名前のインスタンスに含まれるインスタンス メソッド ワードを参照しますwords。それは理にかなっていますか?次のコードは、同じ動作を示しています。
class Bar(object):
def foo(self):
return "I am a method of Bar"
class Foo(object):
def __init__(self, newcls):
newcls = newcls()
self.__class__ = newcls.__class__
self.__dict__ = newcls.__dict__
foo = Foo(Bar)
print foo.foo()
また、ソースへのリンクもありますので、自分で確認してください。
http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus-pysrc.html
http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus.reader.wordlist-pysrc.html#WordListCorpusReader