with
セクションの終了後、以下のコードでエラーAttributeError: __exit__
が表示されます。 Elementオブジェクトはwith
に返されており、__exit__
が定義されているので、私はうんざりです。AttributeオブジェクトのErrorErrorを受け取る:WITHオブジェクトのEXITが定義されている場合でも__exit__
class Builder:
def __init__(self):
print("Builder init fires")
def __getattr__(self, name):
return Element(name, self)
class Element:
def __init__(self, name, builder):
self.name = name
self.builder = builder
print("Element init fires for name of", self.name)
def __call__(*args, **kargs):
print("CALL fires, now with attributes listed:")
for attr, value in sorted(kargs.items()):
print(' %s=>%s' % (attr, value))
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
aa = Builder()
with aa.feed(xmlns='http://www.w3.org/2005/Atom'):
print("INSIDE THE WITH")
コードを実行すると、 '__call_'がNoneを返すので、私は__enter__のAttributeErrorを取得します。 – BrenBarn
python 3.5.2の下では '__exit__'のための' AttributeError'を受け取りますが、 'python 3.6.1の' __enter__'のための 'AttributeError'を受け取りました。 '__call __()'が 'with'によって返されているものを決定し、' return self'を持つ必要があることが正しいことが分かります。ありがとう。 – markhern