ホームページ  >  記事  >  バックエンド開発  >  Pythonでgetattr関数を使用する方法 getattrはファクトリモードを実装します

Pythonでgetattr関数を使用する方法 getattrはファクトリモードを実装します

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

関数自体のドキュメントを見てください

コードをコピーします コードは次のとおりです:

getattr(object 、名前[、デフォルト]) -> 値

オブジェクトから名前付き属性を取得します。getattr(x, 'y') は x.y と同等です。
デフォルトの引数が指定された場合、それがなければ属性が存在しません。その場合、例外が発生します。

説明が非常に抽象的です。この関数が何をするのか教えてください。

オブジェクト.名

getattr(object,name) を試してみましたが、object.name と同じ関数があります。しかし、この本の例では、この関数の機能を非常によく示しています。 getattr を使用すると、ファクトリ モードを簡単に実装できます。

例: モジュールは、HTML、テキスト、XML、およびその他の形式での印刷をサポートしています。渡されたさまざまな形式パラメータに従って、さまざまな関数が呼び出され、いくつかの形式で出力されます。

コードをコピーします コードは次のとおりです:
import statsout
def Output(data, format="text" ): 🎜> Output_function = getattr(statsout, "output_%s" %format)
return Output_function(data)
[code]
この例では、渡されたさまざまな形式パラメータに従って statsout を呼び出すことができますモジュールのさまざまなメソッド (フォーマットされた文字列を使用して Output_%s を実装)

このメソッドによって返されたオブジェクトは、直接使用できます。新しい形式を追加する場合は、モジュールに新しいメソッド関数を記述し、出力関数を呼び出すときに新しいパラメーターを使用して、さまざまな形式で出力するだけです。

本当に便利です

getattr 関数の理解を深めるために、英語の説明を再掲します


Python の getattr 関数は、属性を識別するための識別子の代わりに文字列オブジェクトを使用して、オブジェクトから属性を取得するために使用されます。

[code]

value = obj.attribute

value = getattr(obj, "attribute")
属性が存在する場合は、対応する値が返されます。属性が存在しない場合は、次の値が返されます。代わりに AttributeError 例外が発生します。

getattr 関数は、(__getattr__ メソッドを実装することにより) ドット表記をサポートする任意のオブジェクトで使用できます。これには、クラス オブジェクト、モジュール、さらには関数オブジェクトも含まれます。

path = getattr(sys, "path")

doc = getattr(len, "__doc__")

getattr 関数は通常の属性アクセスと同じ検索ルールを使用し、通常の属性アクセスと両方で使用できます。属性とメソッド:

結果 = obj.method(args)

func = getattr(obj, "method")

result = func(args)

または、1 行で:

result = getattr(obj, "method")(args)

getattr とメソッドの両方を同じ行で呼び出すと、getattr によって発生した AttributeError 例外と同様の例外が発生した場合の混乱を避けるため、例外を適切に処理することが困難になる可能性があります。メソッド内では、次のパターンを使用できます:


try:

func = getattr(obj, "method")

例外 AttributeError:
... メソッドが見つからない場合に対処します ...
else:
result = func(args )
関数はオプションのデフォルト値を取り、属性が存在しない場合に使用されます。次の例では、メソッドが存在する場合にのみ呼び出します。

func = getattr(obj, "method", None)

if func:

func(args)
これはバリエーションで、属性を呼び出す前にその属性が実際に呼び出し可能なオブジェクトであることを確認します。

func = getattr(obj, "method", None)

if callable(func):

func(args)


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