__getattr__
をカスタマイズして、別の関数を呼び出す必要があります。__getattr__の定義済み属性のドキュメント
これは、ヘルプ(object.attr)が機能しない場合を除き、うまく機能します。このコードは対話的な環境で使用されるので、help()は私たちにとって重要になります。
同じ機能を実現するには良い設計がありますが、うまく機能しているのはhelp()です。
__getattr__
をカスタマイズして、別の関数を呼び出す必要があります。__getattr__の定義済み属性のドキュメント
これは、ヘルプ(object.attr)が機能しない場合を除き、うまく機能します。このコードは対話的な環境で使用されるので、help()は私たちにとって重要になります。
同じ機能を実現するには良い設計がありますが、うまく機能しているのはhelp()です。
「ヘルプ」に使用されるテキストは、実際にオブジェクトの「__doc__
」属性です。問題は、あなたが持っているオブジェクトによっては、単に__doc__
属性を設定することができないということです。
何が必要であれば、それは少し簡単です(help(object)
はあなたにすべての可能な属性を示していることではなく)動作する「help(object.attr)
」です - あなただけのどんな__getattr__
リターンが正しく設定ドキュメンテーション文字列をHAE行うことSHUREを取得する必要があります。
私はあなたがこのスニペットのように、いくつかの関数呼び出しの内部結果を返すされていると思いたい「動作しない」になったのは:あなたは、単に機能「foo」という自体を返す場合
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...
、それを呼び出すことなく、docstringは正常に表示されます。
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an (whatever object)
result = foo()
res_type = type(result)
wrapper_dict = res_type.__dict__.copy()
wrapper_dict["__doc__"] = foo.__doc__ #(or "<desired documentation for this attribute>")
new_type = type(res_type.__name__, (res_type,), wrapper_dict)
# I will leave it as an "exercise for the reader" if the
# constructor of the returned object can't take an object
# of the same instance (python native data types, like int, float, list, can)
new_result = new_type(result)
elif ...:
...
return new_result
これは動作するはずです - 場合を除き:そう、このようsomethong使用してみてください - 何ができるか
は、動的に作成したクラスウィッヒの目的は、適切なドキュメンテーション文字列が含まれているよう__getattr__
に戻り値をラップすることです私は間違って、最初の場所で働いていない理由を教えてください。そうであれば、あなたが返すものの例を与えてください__getattr__
。
属性をプロパティにすることができます。このプロパティは自動的にgetterメソッドのdocstringを独自のものとして使用します。また、property()
に引数doc
を指定することもできます。
内部__getattr__は、attrをパラメータとして使用する関数呼び出しです。プロパティ()で可能ですか?このattrは動的でオブジェクト作成時には知られていません。 –
Thannks、それは私のケースで動作します。 __getattr__のすべてのattrは、ネイティブのpythonデータ型を返します。 –