push تسجل الخروج دون استدعاء الدخول في مثالنا. [1] [2]
الخلاصة السريعة
لا؛ التسجيل لا يستدعي __enter__. [1] [2]
- push تسجل الخروج دون استدعاء الدخول في مثالنا. [1] [2]
- على CPython 3.12.14، في الصنف C، __enter__ تسجل "enter" وتعيد "leaf"؛ __exit__ تسجل "exit" وتعيد False. [1] [2]
- own كائن C جديد؛ push(own) تعيده نفسه، والسجل داخل with فارغ؛ بعد خروج المكدس يحتوي "exit" وحدها. [1] [2]
- push تسجل __exit__ فقط هنا؛ enter_context تستدعي __enter__ وتسجل الخروج وتعيد نتيجة الدخول. [1] [2]
- تحكم بكائن جديد: enter_context(control) تعيد "leaf"؛ السجل داخل with هو ["enter"] وبعد الخروج ["enter","exit"]. لا موارد فعلية أو استثناءات في التجربة. [1] [2]
التسجيل
الصنف
على CPython 3.12.14، في الصنف C، __enter__ تسجل "enter" وتعيد "leaf"؛ __exit__ تسجل "exit" وتعيد False. [1] [2]
بلا دخول
own كائن C جديد؛ push(own) تعيده نفسه، والسجل داخل with فارغ؛ بعد خروج المكدس يحتوي "exit" وحدها. [1] [2]
from contextlib import ExitStack class C: def __init__(self):self.events=[] def __enter__(self):self.events.append("enter");return "leaf" def __exit__(self,*args):self.events.append("exit");return False own=C() with ExitStack() as stack: print(stack.push(own) is own,own.events) print(own.events) [1] [2]
![ExitStack.enter_context; control=C(); inside:"leaf",["enter"]; after stack exit:["enter","exit"]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1724/python-exitstack-push-enter-values.png)
الدخول والتحكم
push تسجل __exit__ فقط هنا؛ enter_context تستدعي __enter__ وتسجل الخروج وتعيد نتيجة الدخول. [1] [2]
control=C() with ExitStack() as stack: print(stack.enter_context(control),control.events) print(control.events) [1] [2]
تحكم بكائن جديد: enter_context(control) تعيد "leaf"؛ السجل داخل with هو ["enter"] وبعد الخروج ["enter","exit"]. لا موارد فعلية أو استثناءات في التجربة. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![ExitStack.push; own=C(); C.__enter__:enter; C.__exit__:exit; push(own) is own:True; inside:[]; after stack exit:["exit"]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1724/python-exitstack-push-enter-main.png)