を使用することはpythonicとは見なされないことがわかりisinstance()
、人々はたとえばを使用することを提案しますhasattr()
。
を使用する関数の適切な使用法を文書化するのが最善の方法だと思いますhasattr()
。
例:さまざまなWebサイト(Yahoo Finance、Google Financeなど)から株式データを取得しましたが、クラスがGoogleFinanceData
ありYahooFinanceData
、どちらにもメソッドがありget_stock(date)
ます。2つの株式の価値を比較する関数もあります。
def compare_stocks(stock1,stock2,date):
if hasattr(stock1,'get_stock') and hasattr(stock2,'get_stock'):
if stock1.get_stock(date) < stock2.get_stock(date):
print "stock1 < stock2"
else:
print "stock1 > stock2"
この関数は次のように使用されます。
compare_stocks(GoogleFinanceData('Microsoft'),YahooFinanceData('Apple'),'2012-03-14')
このようには使用されません:
compare_stocks('Tree',123,'bla')
stock1
問題は、どのクラスに使用できるかを人々に知らせるにはどうすればよいstock2
ですか。私はのようなdocstringを書くことになっていて"stock1 and stock2 ought to have a method get_stock"
、人々はソースを自分で調べなければなりませんか?または、すべての正しいクラスを1つのモジュールに入れて、そのファイルをdocstringで参照しますか?