0

複数のキーワードパラメータを受け取るクラスを定義する必要があります。

私のコードは次のようになります:

class test1:
    def __init__(self,parm1=val1, parm2=val2):
        self.x = parm1
        self.y = parm2
        print('parm1',self.x)


def main():
    x = test1(1,2)

val1しかし、定義されていないエラーが発生します。適切な方法は何でしょうか?

4

4 に答える 4

2
def __init__(self,parm1=None,parm2=None):...

val1とval2で何をしているのかわかりません...エラーは、これらの変数が存在しないことを示しています...したがって、それらを使用できません...それらを存在させるか、何か他のことをしてください...

于 2012-10-03T20:35:36.740 に答える
1

val1 と val2 を文字列にします。変数として定義されていません。それらが単なるプレースホルダーである場合は、他の人が提案したように None を使用してください。

于 2012-10-03T20:35:42.330 に答える
1

クラスを定義する前にval1、次のように定義する必要があります。val2 test

val1 = 1
val2 = 3.141592653

class test(object):
    def __init__(self, param1=val1, param2=val2):
        self.x = param1
        self.y = param2

このアプローチには利点があります (たとえば、環境から読み取られる一般的なデフォルト値である場合val1などval2)。ただし、実際には読み取り可能ではありません。次のようなものを使用するのが最善です:

class test(object):
    def __init__(self, param1=None, param2=None):
        if param1 is None:
            self.x = val1
        else: 
            self.x = val2

ここでも、...の定義のに定義されval1ています。val2test

于 2012-10-03T21:28:13.763 に答える
0

関数引数のデフォルト値はdef、後で関数が呼び出されるたびにではなく、その時点で関数のコンパイル済みコードの一部として保存されるため、関数が実行されるときに存在する必要があります。通常、None宣言でデフォルト値として使用され、関数の本体で検出され、実際の (おそらく動的に計算された) デフォルト値に置き換えられます。

于 2012-10-03T21:37:15.360 に答える