2017-11-08 5 views
0

イム交流プログラマとイムを理解し、私はクラスのメソッドは、ニーモニックは、親クラスとして使用されていないコードクラスメソッドの使用方法のpythonにかなり新しい

class Mnemonic(object): 
    def __init__(self, language): 
     self.radix = 2048 

    @classmethod 
    def _get_directory(cls): 
     return os.path.join(os.path.dirname(__file__), 'wordlist') 

    @classmethod 
    def list_languages(cls): 
     return [f.split('.')[0] for f in os.listdir(cls._get_directory()) if f.endswith('.txt')] 

    @classmethod 
    def normalize_string(cls, txt): 
     if isinstance(txt, str if sys.version < '3' else bytes): 
      utxt = txt.decode('utf8') 
     elif isinstance(txt, unicode if sys.version < '3' else str): 
      utxt = txt 
     else: 
      raise TypeError("String value expected") 

     return unicodedata.normalize('NFKD', utxt) 

    @classmethod 
    def detect_language(cls, code): 
     code = cls.normalize_string(code) 
     first = code.split(' ')[0] 
     languages = cls.list_languages() 

     for lang in languages: 
      mnemo = cls(lang) 
      if first in mnemo.wordlist: 
       return lang 

     raise ConfigurationError("Language not detected") 

    def generate(self, strength=128): 
     # Do Stuff 

    def to_entropy(self, words): 
     # Do Stuff 

    def to_mnemonic(self, data): 
     # Do Stuff 

    def check(self, mnemonic): 
     # Do Stuff 

    def expand_word(self, prefix): 
     # Do Stuff 

    def expand(self, mnemonic): 
       # Do Stuff 

    @classmethod 
    def to_seed(cls, mnemonic, passphrase=''): 
     mnemonic = cls.normalize_string(mnemonic) 
     passphrase = cls.normalize_string(passphrase) 
     return PBKDF2(mnemonic, u'mnemonic' + passphrase, iterations=PBKDF2_ROUNDS, macmodule=hmac, digestmodule=hashlib.sha512).read(64) 

のこの作品で使用されている理由を理解するトラブルを持っていますどこでも、私はそれが使用されている理由を理解することができます_get_directory()

+1

'_get_directory'、' list_languages'、 'normalize_string'、' to_seed'のようなものは、 'staticmethod'でもよいし、フリー関数でもかまいません。 – 0x5453

+1

classmethodsの使用はここでは必要ないようです。 'cls'が使用される唯一の方法は名前空間であり、これは疑問を提起します。モジュールレベルの名前空間を使わないのはなぜですか?正直なところ、ここではクラスメソッドを使用しません。これは、Pythonコードを記述しているJavaプログラマとして、モジュールレベルの関数を使用することを嫌に思います。 –

+0

かなりの文脈が欠落しているようです。なぜ '__init__'は無視する' language'引数を取るのですか? – chepner

答えて

0

あなたの懸念は有効ですが、これはPythonクラスのメソッドを書くためのベストプラクティスではありません。 @classmethodパラメータはここでは必要ありません。たとえば、_get_directory()メソッドは、クラスに接続していないため、独自の関数である可能性があります。 Javaでは、すべてがクラスまたはクラスでなければならないので、これはjava devのpythonコードのようです。

関連する問題