2011-07-28 14 views
6

時には、メソッドと属性を名前で区別するのが難しい場合があります。例えば名前でPythonのメソッドと属性を区別する方法


そこにいるkeys()方法とxml.etree.ElementTree.Elementクラスでtext属性。

text:text属性は、要素に関連付けられた追加データを保持するために使用できます。

keys():要素の属性名をリストとして返します。


text属性が、keys()方法を作るためにいくつかの基本的なルール/規則はありますか?

text()を方法にすると、keys属性になります。それはまだOKと思われます。

+0

の特定のタイプで指摘されたかどうかをチェックする方法ですテキストを関数として、キーを属性としてオブジェクトを作成します。名前が関数かvarかをオンザフライで検出する必要がある場合は、callable型とisintance型を使用できます。これらのメソッドの詳細については、http://diveintopython.org/power_of_introspection/built_in_functions.html –

+0

「基本的なルールや規則はありますか」を参照してください。はい。引用したドキュメントは、必要な情報を提供します。あなたがすでに見つけたものは何をもっと必要としますか? –

答えて

6

唯一実際に区別できるのは、呼び出し可能かどうかということです。組み込み関数callable()を実際のオブジェクト(名前付きの文字列ではありません)と組み合わせて呼び出し可能かどうかを判断できます。あなたのケースでは

>>> from xml.etree import ElementTree 
>>> elt = ElementTree.Element("") 
>>> callable(elt.keys) 
True 
>>> callable(elt.text) 
False 
+0

たぶん私は質問を違った方法で解釈していたかもしれませんが、kevが求めていたと思ったのは、基本的に同じ方法ではないので、どういう人物を覚えていますか?呼び出し構文を混在させることはできないためです。 – Owen

+0

@Owen。私はどのプログラムを書くのかを覚えておく必要があります。私はしばしばエラーが発生するまでそれらを混ぜます。それは痛い。 – kev

+0

はい、私は同じ問題を抱えています(しかしScalaでは)。私は良い解決策を知らない。 – Owen

2

あなたが命名規則の話をしている場合は、Pythonで、両方のは、通常は小文字です。

あなたは離れて2を伝えるためにどのように話をしている場合は、

from collections import Callable, Container 
if isinstance(attribute, Callable): 
    return attribute() 
elif isinstance(attribute, str): 
    return attribute 
elif isinstance(attribute, Container): 
    return 'Yes' if 'Blah' in attribute 
else: 
    return str(attribute) 

は、変数が、私があなたならば、それはOKであると信じているオブジェクト

関連する問題