Pythonオブジェクトタイプ判定と関数リロード
1.判断対象タイプ
type関数でオブジェクトのタイプがわかります.サンプルコードは次のとおりです.
2.関数のリロードは、関数を書くときに、異なるパラメータタイプと異なるパラメータ数に対応する必要がある場合がよくあります.
C++では、通常、複数の「同名の異なるパラメータ」の関数を再ロードして処理します.
しかし、Pythonでのリロードは、パラメータタイプ判定+デフォルト値という別の方法で実現できます.
上のコードは、sパラメータを印刷する関数tracelogを定義しています.sパラメータは文字列またはリストであってもよいし、指定された長さの横線を印刷することもできます.この例の実行結果は次のとおりです.
main:
最初の文は50文字の横線を印刷しました
2番目の文は、デフォルト40の長さの横線とコマンドラインのパラメータリストを印刷します.
3番目の文は20文字の横線を印刷しました
ここで、isinstance関数は、オブジェクトが特定のタイプであるかどうかを判断するための関数であり、2番目のパラメータはオブジェクトタイプであり、type関数でクエリーできます.
type関数でオブジェクトのタイプがわかります.サンプルコードは次のとおりです.
x = 'Hello'
s = type(x)
print s
2.関数のリロードは、関数を書くときに、異なるパラメータタイプと異なるパラメータ数に対応する必要がある場合がよくあります.
C++では、通常、複数の「同名の異なるパラメータ」の関数を再ロードして処理します.
しかし、Pythonでのリロードは、パラメータタイプ判定+デフォルト値という別の方法で実現できます.
import os, sys
def tracelog(s='', n=40):
if isinstance(n, int):
print '-'*n
else:
print '-'*40
if isinstance(s, str):
print s
elif isinstance(s, list):
s1 = ''
for x in s:
s1 = s1 + ' ' + x
print s1
def main():
tracelog(n=50)
tracelog(sys.argv)
tracelog(n=20)
main()
上のコードは、sパラメータを印刷する関数tracelogを定義しています.sパラメータは文字列またはリストであってもよいし、指定された長さの横線を印刷することもできます.この例の実行結果は次のとおりです.
--------------------------------------------------
----------------------------------------
C:\Documents and Settings\Administrator\ \pystudy\chongzai.py
--------------------
main:
最初の文は50文字の横線を印刷しました
2番目の文は、デフォルト40の長さの横線とコマンドラインのパラメータリストを印刷します.
3番目の文は20文字の横線を印刷しました
ここで、isinstance関数は、オブジェクトが特定のタイプであるかどうかを判断するための関数であり、2番目のパラメータはオブジェクトタイプであり、type関数でクエリーできます.