مشكلة في استخدام مثيل في with_statement
-
19-08-2019 - |
سؤال
لقد بدأت مؤخرا إلى تعلم بايثون ، وصلت مع البيان .لقد حاولت استخدامه مع فئة سبيل المثال , ولكن أعتقد أنني أفعل شيئا خاطئا .هنا هو رمز :
from __future__ import with_statement
import pdb
class Geo:
def __init__(self,text):
self.text = text
def __enter__(self):
print "entering"
def __exit__(self,exception_type,exception_value,exception_traceback):
print "exiting"
def ok(self):
print self.text
def __get(self):
return self.text
with Geo("line") as g :
g.ok()
الشيء هو أنه عندما يصل مترجم طيب طريقة داخل مع بيان التالية الاستثناء :
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
لماذا ز الكائن نوع NoneType ?كيف يمكنني استخدام مثيل مع مع البيان ؟
المحلول
الخاص بك __enter__
الأسلوب يحتاج إلى العودة الكائن الذي ينبغي استخدام "as g
"جزء من العبارة.ترى الوثائق, حيث تنص على:
- إذا كان الهدف المدرجة في العبارة مع قيمة الإرجاع من
__enter__()
هو المسندة إليها.
حاليا, وقد لا عودة البيان ، حتى ز يحصل لا بد أن None
(الافتراضي قيمة الإرجاع)
لا تنتمي إلى StackOverflow