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()
'_get_directory'、' list_languages'、 'normalize_string'、' to_seed'のようなものは、 'staticmethod'でもよいし、フリー関数でもかまいません。 – 0x5453
classmethodsの使用はここでは必要ないようです。 'cls'が使用される唯一の方法は名前空間であり、これは疑問を提起します。モジュールレベルの名前空間を使わないのはなぜですか?正直なところ、ここではクラスメソッドを使用しません。これは、Pythonコードを記述しているJavaプログラマとして、モジュールレベルの関数を使用することを嫌に思います。 –
かなりの文脈が欠落しているようです。なぜ '__init__'は無視する' language'引数を取るのですか? – chepner