hasattr(オブジェクト, 名前)
機能: オブジェクトに name という名前の属性が含まれているかどうかを判断します (hasattr は getattr(ojbect, name) を呼び出して実装され、例外がスローされるかどうかを確認します)。
例:
>>> hasattr(list, 'append') True >>> hasattr(list, 'add') False getattr(object,name,default):
関数: オブジェクトの name という名前の属性の属性値を返します。属性名が存在しない場合は、その属性値が直接返され、AttribetError 例外がトリガーされるか、デフォルト値が返されます。オプションのパラメータdefaultが定義されている場合。
このメソッドの主な機能は、リフレクション メカニズムを実装することです。つまり、メソッド インスタンスは文字列を通じて取得できます。このようにして、クラスが呼び出す可能性のあるメソッドを構成ファイルに配置し、必要に応じてそれらを動的にロードできます。
以下では、小さな例を使用してその使用法を説明します。
import func_file #自定义python模块 cs=input('请输入要访问的URL:') if cs=='loggin': func_file.loggin() if cs =='home': func_file.home() if cs =='': pass#以下省略
カスタムモジュールを定義してその中のメソッドを呼び出し、ifを使って判定する場合、モジュール内で多くのメソッドが使用されていると、開発効率に大きな影響を与え、コードの冗長性が劣るのは明らかです。お勧めです。以下では、hasattr() 関数を使用してニーズを実現します。
import func_file #自定义python模块,需事先存在 def run(): while True: cs=input('请输入要访问的URL:') #hasattr利用字符串的形式去对象(模块)中操作(寻找)成员 if hasattr(func_file,cs): #判断用户输入的URL是否在func_file模块中 func=getattr(func_file,cs) #有则将func_file模块下的cs函数赋值 func() #等同于执行func_file模块下的cs函数 else: print('404')#定义错误页面 run()
def run(): while True: cs=input('请输入:') v,k=cs.split('/') #获得输入的模块和模块的方法 obj=__import__('lib.'+v,fromlist=True) #调用lib目录下的模块fromlist=True按路径连接的方式导入 if hasattr(obj,k): f= getattr(obj,k) f() else: print('404') if __name__ == '__main__': run()