الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مامعني __unicode__

بدأه sharkawey في 28 مارس 2014 · 1 رد · 759 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم يااصدقاء

معلش بس انا مبتداء لدي سوال ماهو ال __unicode__ او هذة الدوال الي بيكون قبلها وبعدها اتنين under score ??? وشكرا :)

#2

هذه وظائف عادية مثلها مثل أي وظيفة تعرفها، لكنها لها معنى خاص بايثون.

 

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

>>> x = 123
>>>
>>> type(x)
<type 'int'>
>>> print(x)
123
>>>

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

>>> x.__str__()
'123'
>>> print(x.__str__())
'123'
>>>

هناك ثلاث طرق لتحويل كائن لنص، repr و str و unicode.

 

الأولى repr تعني represent يفترض (لست ملزم) أن تعيد نص يمكن استخدامه لأعادة تمثيل الكائن. مثلاً أحد المكتبات تستخدمه:

>>> import ctypes
>>>
>>>
>>> c = ctypes.c_int(123)
>>>
>>> c
c_long(123)
>>>
>>> repr(c)
'c_long(123)'
>>>
>>> c.__repr__()
'c_long(123)'
>>>

النص الذي تعيده repr يفترض أنك لو نسخته وألصقته لأعاد لك نفس الكائن.

 

str تستخدم لإعادة نص قابل للقراءة، مثل الذي تطبعه باستخدام print، انظر لكيفية استخدام datetime لـrepr و str:

>>> import datetime
>>>
>>> t = datetime.datetime.now()
>>>
>>> t
datetime.datetime(2014, 3, 28, 20, 27, 31, 621554)
>>>
>>> repr(t)
'datetime.datetime(2014, 3, 28, 20, 27, 31, 621554)'
>>>
>>> print(t)
2014-03-28 20:27:31.621554
>>>
>>> str(t)
'2014-03-28 20:27:31.621554'
>>>
>>>

repr لأعادة تمثيل الكائن datetime.datetime و str تاريخ عادي، ctypes.c_int عرف من برمجها فقط repr ولم يعرف str (إذا لم تعرف str فافتراضياً ستستدعى repr).

 

الأخيرة unicode تستخدم لأظهار نص unicode وهذه مستخدمه فقط في بايثون 2 وأزيلت من بايثون 3 (يمكنك استخدام str مباشرة، فكل النصوص في بايثون 3 unicode). حقيقة لاتوجد لدي مكتبة حالياً تعامل الـunicode بشكل مختلف عن str. لكن يمكننا إنشاء كائن خاص يدعمها، مثلاً:

>>> class Foo(object):
..     def __str__(self):
..         return 'ascii Foo'
..     def __unicode__(self):
..         return u'unicode Foo'
..     def __repr__(self):
..         return 'Foo()'
..         
>>>
>>> obj = Foo()
>>>
>>>
>>> obj
Foo()
>>> print(obj)
ascii Foo
>>> print(u'{}'.format(obj))
unicode Foo
>>>
>>>
>>>
>>> repr(obj)
'Foo()'
>>> str(obj)
'ascii Foo'
>>> unicode(obj)
u'unicode Foo'
>>>
>>>
>>> obj.__repr__()
'Foo()'
>>> obj.__str__()
'ascii Foo'
>>> obj.__unicode__()
u'unicode Foo'
>>>

تم تعديل هذه المشاركة بواسطة Mr.B في 28 مارس 2014 في 20:41

2

مواضيع مشابهة