ホームページ >バックエンド開発 >Python チュートリアル >Python の getattr 関数と hasattr 関数についての簡単な説明

Python の getattr 関数と hasattr 関数についての簡単な説明

WBOY
WBOYオリジナル
2016-06-16 08:47:471325ブラウズ

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 を開いたときの感覚とよく似ていると思いませんか?


前の例には問題があります。実際の状況では、関数関数が多数のモジュールに格納されている可能性があり、それぞれを個別にインポートする必要があるため、getattr() 関数を使用してモジュールを動的にロードできるでしょうか。もちろん!

例を参照:

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 をサポートしていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。