-1
私はJavaで学んだのと同じ方法でOO Pythonコードを書こうとしています。それはおそらく私が南に行くところです。私は主なスクリプトと他の人が書いたクラスを持っています。私はメインのスクリプトのクラスを呼び出しますが、私が使うすべてのテクニックは[クラス名]を呼び出すことはできません。Pythonクラスが呼び出し可能でないのはなぜですか?
以下は最新の試みです。これがメインスクリプトです。変数directoryPairsはセキュリティのために削除されました。以下は
import yaml
import pysftp
import FingerprintKey
with open('config/config.yaml') as settings:
cfg = yaml.load(settings)
host = cfg['host']
username = cfg['username']
password = cfg['password']
serverkey = cfg['fingerPrint']
x = FingerprintKey(serverkey)
options = pysftp.CnOpts()
options.hostkeys.clear()
options.hostkeys.add('www.example.com', u'ecdsa-sha2-nistp384', x)
with pysftp.Connection(host, username=username, password=password, cnopts=options) as sftp:
#for source, destination in directoryPairs.items():
#sftp.get_d(source, destination, preserve_mtime=True)
#if sftp.exists(source):
#files = sftp.listdir(source)
#for f in files:
#sftp.remove(os.path.join(source, f))
sftp.close()
は、これらのファイルの
import hashlib as hl
def trim_fingerprint(fingerprint):
if fingerprint.startswith('ecdsa-sha2-nistp384 384 '):
return fingerprint[len('ecdsa-sha2-nistp384 384 '):]
return fingerprint
def clean_fingerprint(fingerprint):
return trim_fingerprint(fingerprint).replace(':', '')
class FingerprintKey:
def __init__(self, fingerprint):
self.fingerprint = clean_fingerprint(fingerprint)
def compare(self, other):
if callable(getattr(other, "get_fingerprint", None)):
return other.get_fingerprint() == self.fingerprint
elif clean_fingerprint(other) == self.get_fingerprint():
return True
elif hl.md5(other).digest().encode('hex') == self.fingerprint:
return True
else:
return False
def __cmp__(self, other):
return self.compare(other)
def __contains__(self, other):
return self.compare(other)
def __eq__(self, other):
return self.compare(other)
def __ne__(self, other):
return not self.compare(other)
def get_fingerprint(self):
return self.fingerprint
def get_name(self):
return u'ecdsa-sha2-nistp384'
def asbytes(self):
# Note: This returns itself.
# That way when comparisons are done to asbytes return value,
# this class can handle the comparison.
return self
両方が同じディレクトリにあるFingerprintKey.pyクラスです。
をAuthOnFingerPrintするクラスファイルの名前を変更し、 'FingerprintKey'は、その名前のモジュールを指します。そのモジュール内の(同じ名前の)クラスは、「FingerprintKey.FingerprintKey」と呼ばれます。 – mkrieger1
OH! OK。だから、Javaのようにファイル名をクラスと同じにする必要はありません。 –