سؤال

لقد بدأت مؤخرا إلى تعلم بايثون ، وصلت مع البيان .لقد حاولت استخدامه مع فئة سبيل المثال , ولكن أعتقد أنني أفعل شيئا خاطئا .هنا هو رمز :


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 (الافتراضي قيمة الإرجاع)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top