ホームページ >バックエンド開発 >Python チュートリアル >Python の getattr 関数と hasattr 関数についての簡単な説明
hasattr(オブジェクト, 名前)
関数: オブジェクトに name という名前の属性が含まれているかどうかを判断します (hasattr は、getattr(ojbect, name) を呼び出して例外がスローされるかどうかを確認することで実装されます)。
例:
>>> hasattr(list, 'append') True >>> hasattr(list, 'add') False
getattr(オブジェクト,名前,デフォルト):
関数: オブジェクトの名前という名前の属性の属性値を返します。属性名が存在しない場合は、その属性値が直接返されます。 、オプションのパラメーターのデフォルトが定義されている場合、AttribetError がトリガーされるか、デフォルト値が返されます。
このメソッドの主な機能は、リフレクション メカニズムを実装することです。つまり、メソッド インスタンスは文字列を通じて取得できます。このようにして、クラスが呼び出す可能性のあるメソッドを構成ファイルに配置し、必要に応じてそれらを動的にロードできます。
以下では、簡単な例を使用してその使用法を説明します。
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()カスタム モジュールをインポートした後、入力内容に応じて gataattr を動的にロードできます。ユーザー入力が存在するかどうかを判断するために hasattr() 関数が使用されます。存在しない場合は、カスタム メソッドが呼び出されます。
Web サイトの URL を開いたときの感覚とよく似ていると思いませんか?
例を参照:
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()getattr は非常に強力だと思いますか?実際、getattr() は Python リフレクションを実装するための構成要素であり、setattr() や dir() などの他のメソッドと組み合わせると、多くの興味深いことができます。
上記の記事は Python の getattr 関数について簡単に説明しており、hasattr 関数はエディターによって共有されるすべての内容です。参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。