「」「
1、新しいメソッドの実行順序とinitメソッドが実行さ?
:新しいメソッドの最初の実装を、メモリを開き、オブジェクトを作成し、初期化を実行する
」「」
#のクラスパーソン():
#の DEFの__init __(自己、名前、年齢) :
#1 self.name =名
#の self.age年齢=
#の 印刷( "私はinitメソッドだ。") #
#
DEF __new __(CLS、* argsを、** kwargsから):
#の 印刷( "私は新しい方法です。")
#の リターンオブジェクト.__新しい新しい__(CLS) #
#
P =人( "リリー"、18がある)
#P2 =人( "ルーシー"、20である。)
#の印刷(ID(P)、ID(P2))
'' '
2を、コールこの方法は、どのような時に呼び出されます?
:ときにオブジェクト()が呼び出されたとき
'「」
#をクラスパーソン():
#の DEFの__init __(自己):
#の 印刷( "私はinitメソッドだ。") #
#
DEF __call __(自己):
#の 印刷( "私はメソッドを呼び出す") #
#
P-=人()
#P-()
「」「」
3、クラスを記述してください、反射して、クラスの静的属性を追加
「」 '
#のクラスパーソン():
#の パス
#の
#のSETATTR(人、 『年齢』、30)
#の印刷( person.age)
「」「
4を、反射のクラスのタイトル上のオブジェクトの属性名を追加し、あなたの名前である
「」」
#のクラスパーソン():
# パス
#
#P =人()
#SETATTR(人、 "年齢"、30)
#1 SETATTR(P、 "名前"、 "暁ヤンヤン")
#の印刷(person.Age)
#の印刷(p.name)
'' '
。5、達成するための新しい方法を使用してシングルトン
'' ' #
のクラスシングルトン():
# __instance =なし#格納先
#
# __init __ DEF(セルフ): #
(。 "私はこの方法を初期化")を印刷
#
# DEF __new __(CLS、* argsを、** kwargsから):
# そうでない場合はシングルトン.__インスタンス:#はなしかどうかを判断するためではありません
# シングルトンのインスタンス=オブジェクト.__ .__新しい新しい__(CLS)#オブジェクトを作成し、クラス変数の更新
#の リターンシングルトンを。__instanceの
#
#1 S =シングルトン()
#S1 =シングルトン()
#の印刷(ID(S)、ID(S1))
'' '
6、整合性チェック二つのファイル。
' ''
#のインポートhashlib
#の
#のDEFのget_file_md5(ファイル):
# "" "文字列""暗号化されたMD5の後に"のファイルの内容を返します
# OBJ = hashlib.md5()
#の obj.update(オープン(ファイル).read()。(エンコード" UTF-8「)を)
#1 )(リターンobj.hexdigestを
#1
#:get_file_md5( "file1.py")== get_file_md5( "file2.py")IF
#の 印刷( "2つのファイルの内容と一致していた。")
#他に:
#の 印刷( "2つのファイルの内容が矛盾しています。" )
'' '
7、暗号文の塩ログイン
「」 '
#インポートhashlibの
#
#=ユーザー名""
#のパスワード= ""
#の
#のクラス認証():
#1 "アパートで報告された草のインチを、作られた" __salt =ソルト文字列#
#
# DEF get_md5_str(セルフ、STR1):
# "" " MD5暗号化"" "
# md5_obj = hashlib.md5(自己.__ salt.encode(" UTF-8 "))
#の md5_obj.update(str1.encode(" UTF-8「))
#の リターンmd5_obj.hexdigest() #
#
登録DEF(セルフ):
# "" "ユーザ登録" ""
# しばらく1:
#1 名= INPUT( "登録ユーザ名:")。ストリップ()
# INPUT = PWD( "登録パスワード:").strip()
# IF名= ""とPWD =! ""! #
、 株式会社フリーは、ユーザー名、パスワードの参加
#の ユーザ名=名
#の パスワード= self.get_md5_str(PWD)
#の 印刷を( " [%s]が正常に登録され、「%ユーザー名)
#の 復帰真
# 他に:
#の 印刷(」ユーザー名とパスワードを空にすることはできません「)。 #
#
DEFログイン(セルフ):
# 」「」ユーザログイン「」 "
# 中1:
#の 名前= INPUT(「ログインユーザーネーム:「).strip()
# 名前== "IF":
#の 印刷(。 "ユーザー名はNULLにすることはできません")
# 続行
#の PWDを= INPUT( "ログインパスワード:").strip()
# PWD IF == "":
#の 印刷(「パスワードはできません")空に
# 続行
#の
# :ユーザ名IF == == self.get_md5_str名とパスワード(PWD)
# " %名)。[%S]ログイン成功を印刷( "
#の リターン真
# 他に:
#の 印刷を("ユーザー名またはパスワードが正しくありません。」)
#は Falseを返す
#の
#の
#をAUTH =認証()#オブジェクトを作成
#1 auth.register()#登録
#のauth.login()#ログインを
「「」
ログ設定8、出力ファイルに画面に完了し、いずれかを出力することができ
「」」
インポートログ
ログをインポートハンドラクラス:ロガー(オブジェクト)
level_relations = {
' デバッグ' :logging.DEBUG、
' 情報' :logging.info、
' 警告' :logging.WARNING、
' エラー' :logging.error、
' クリティカル'
:Logging.CRITICAL
} #ログレベルのマッピング関係
DEF __init__(セルフ、ファイル名、レベル= ' 情報'、= ' D '。、backCount = 3 、
FMT = ' %(いるasctime)S - %(パス名)S [ライン: %(LINENO)D] - %(levelname)S:%(メッセージ)S ' ):
self.logger = logging.getLogger(ファイル名)
format_str = logging.Formatter(FMT) #はログ形式設定
self.logger.setLevel(自己.level_relations.get(レベル)) #は、ログレベルの設定
SH = logging.StreamHandler() 位画面上に出力する
sh.setFormatter(format_str) #の設定画面上のフォーマット
#自動的にファイルプロセッサ生成指定された間隔で書き込ま#ファイルへ
番目= handlers.TimedRotatingFileHandler(ファイル名=ファイル名、場合=とき、backupCount = backCount 、エンコーディング= ' UTF-8 ' )
th.setFormatter(format_str) #フォーマットファイル書き込み
self.logger.addHandler(SH) #におけるロガーへのオブジェクトに
self.logger.addHandler(TH)
IF __name__は == ' __main__ ' :
ログイン =ロガー(' all.log '、レベル= ' デバッグ' )
log.logger.debug(' デバッグ' )
log.logger.info(' 情報' )
log.logger.warning(' 警告' )
log.logger.error(' 报错' )
log.logger.critical(' 严重' )
ロガー(' のerror.log '、レベル= ' エラー').logger.error(' エラー')