{class foo(object):
def __enter__ (self):
print("Enter")
def __exit__(self,type,value,traceback):
print("Exit")
def method(self):
print("Method")
with foo() as instant:
instant.method()}
Execute this py file and console shows these message:
Enter
Exit
instant.method()
AttributeError: 'NoneType' object has no attribute 'method'
unable to find methods?
__enter__
should return self
:
class foo(object):
def __enter__ (self):
print("Enter")
return self
def __exit__(self,type,value,traceback):
print("Exit")
def method(self):
print("Method")
with foo() as instant:
instant.method()
yields
Enter
Method
Exit
If __enter__
does not return self
, then it returns None
by default. Thus, instant
is assigned the value None
. This is why you get the error message
'NoneType' object has no attribute 'method'
(my emphasis)
The problem is that your __enter__
method does not return self
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With