في هذه التدوينة سنتحدث عن
وكيفية عملها ولماذا يجب ان لا نستخدم هذه الطريقة في عملية الاستراد .
استراد * من module
هذا السطر يعني اني اريد الوصول الى جميع الأسماء الموجودة داخل module ومن المفترض اني استطيع استعمال جميع الوظائف والصفوف الموجودة داخل هذا الموديل .
ومن أجل فهم اكبر سنقوم باخذ مثال بانشاء ملف something.py
الان نقوم بتشغيل مترجم بايثونIDLE ونقوم بتشغيل السطر التالي :from module import *
وكيفية عملها ولماذا يجب ان لا نستخدم هذه الطريقة في عملية الاستراد .
استراد * من module
هذا السطر يعني اني اريد الوصول الى جميع الأسماء الموجودة داخل module ومن المفترض اني استطيع استعمال جميع الوظائف والصفوف الموجودة داخل هذا الموديل .
ومن أجل فهم اكبر سنقوم باخذ مثال بانشاء ملف something.py
# something.py public_variable = 42 _private_variable = 141 def public_function(): print("I'm a public function! yay!") def _private_function(): print("Ain't nobody accessing me from another module...usually") class PublicClass(object): pass class _WeirdClass(object): pass
from something import *
from something import * public_variable 42
_private_variable ... NameError: name '_private_variable' is not defined public_function() "I'm a public function! yay!" _private_function() ... NameError: name '_private_function' is not defined c = PublicClass() cc = _WeirdClass() ... NameError: name '_WeirdClass' is not defined
اذا ما هو الحل؟
لم نقم بذكر بعد __all__ وماذا تعني .
__all__ هي قائمة تحتوي على سلاسل لتحديد وتعريف الرموز الموجودة في module ويتم استخدامها عند عملية استراد *.
عندما لا نقوم بتعريف __all__ فان عملية استراد * ستقوم باستراد جميع الأسماء ما عدا الاسماء التي تبدا بالعلامة _ والتي تعني انها أسماء خاصة .
الان سنقوم بتعريف __all__ في ملف something.py .
# something.py __all__ = ['_private_variable', 'PublicClass'] # The rest is the same as before public_variable = 42 _private_variable = 141 def public_function(): print("I'm a public function! yay!") def _private_function(): print("Ain't nobody accessing me from another module...usually") class PublicClass(object): pass class _WeirdClass(object): pass
>>> from something import * >>> public_variable ... NameError: name 'public_variable' is not defined >>> _private_variable 0 >>> public_function() ... NameError: name 'public_function' is not defined >>> _private_function() ... NameError: name '_private_function' is not defined >>> c = PublicClass() >>> c>>> c = _WeirdClass() ... NameError: name '_WeirdClass' is not defined
ليست هناك تعليقات:
إرسال تعليق