リストが渡される関数を含むPython親クラスがあり、特定の要素(キー)がその中に含まれているかどうかを確認します。
class Output():
def __init__(self, data):
raise NotImplementedError
def checkCal(self, options):
if "calendar" in options:
#do some stuff
次に、それを継承する別のクラスがあります。
import output
class CSVOutput(output.Output):
# blah blah blah
def theFunction(self, data):
data["first"] = "hello"
data["second"] = "calendar"
self.checkCal(self, data)
ただし、最後の行は次のようになりTypeError
ます。
TypeError: checkCal() takes exactly 2 arguments (3 given)
与えられた引数の数は3つであるself
と思います。これは、1つがあり、リストに2つの要素が含まれているためです。しかし、リストを単一のオブジェクトとして関数に渡すことができるはずですよね?要素がいくつあるかはいつもわかりません。私はたくさんの読書をしましたが、以前にこの特定の問題を経験したことがある人を見つけることができないようです(それは私がそれを間違っている可能性が高いです!)。
self
インスタンスでメソッドを呼び出すときに含める必要はありません。
self.checkCal(data)
十分です。
Pythonは、インスタンスの関数名を参照するたびにメソッドオブジェクトを生成し、そのオブジェクトは、インスタンスを最初の引数として渡す元の関数を呼び出します。すべての技術的な詳細については、記述子プロトコルHOWTOを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加