0

これは、Learning Python から抽出および適応されたコードですlambda。5 行目での使用は何ですか。引数が 0 であることを期待return lambda *args: '[Getattr str]'しているようですが、ここでは不要ですか?print(X.__str__())*args

class GetAttr:
    def __getattr__(self, attr):
        print('getattr: ' + attr)
        if attr == '__str__':
            return lambda *args: '[Getattr str]'
        else:
            return lambda *args: None

X = GetAttr()
print(X.__call__('why', 'any', 'number', 'of', 'arguments', 'here')) 
print(X.__str__())   # but not here? 
4

4 に答える 4

0

渡された引数を粉砕するためのものです。いくつの引数を入れて__str__()も、基本的にそれらは常に無視されます。

一方、これはひどくひどく書かれた Python です。代わりに何か他のことを試してみたいかもしれません

于 2013-08-22T09:03:16.600 に答える
0

X.__str__()はい、常に引数なしで呼び出されるため、この場合は不要です。args で誤って呼び出された場合に必要な動作によって異なります。

str1 = lambda *args: "[Getattr str]"
str2 = lambda : "[Getattr str]"

str1(1,2,3) #works, args ignored
str2(1,2,3) #throws runtime error
于 2013-08-22T09:08:21.970 に答える