Fahmy Mostafa نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 عندما أقوم بطباعة أي صنف في بايثون أحصل على نتيجة مشابهة للتالي: <__main__.Foo instance at 0x7fa2b29d> هل توجد طريقة لعمل مثل هذه النتيجة عند طباعة صنف قمت بإنشائه بنفسي، بحيث يتم طباعة هذه النتيجة عند إستخدام دالة print لطباعة instance من الصنف 1 اقتباس
1 سمير عبود نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 تستطيع إعادة تعريف التابع __str__ من خلال الصنف وسيتم تنفيذ محتواه عند إستخدام طباعة كائن من ذلك الصنف: class Foo: def __str__(self): return "instance of foo" foo = Foo() print(foo) # instance of foo و تستطيع إعادة تعريف التابع __repr__ الذي سيتم تنفيذه في حالة إستدعاء الدالة ()repr او إستدعاء الكائن مباشرة من الواجهة التفاعلية لبايثون: >>> class Foo: ... def __repr__(self): ... return "Foo" ... def __str__(self): ... return "instance of foo" ... >>> foo = Foo() >>> print(foo) instance of foo >>> repr(foo) 'Foo' >>> foo Foo اقتباس
0 ريم المهدي نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 يمكنك أيضاً طباعة المعلومات الخاصة بأي Class أو Object في بايثون بعدة طرق، منها إستخدام dir، vars أو بإستخدام inspect. في المثال التالي سنقوم بإستخدام dir و التي تطبع كل خصائص Object أو Class مرتبة في شكل قائمة، لاحظ مخرج المثال التالي: class Test: def __init__ (self): self.value = 3 test = Test() dir(test) بعد تعريف Test Class و بداخله دالة الإنشاء التي تعرف متغير قيمته 3، قمنا بتعريف Object وأسميناه test، طباعة dir(test) أنتجت كل خصائص الObject. أما ما قمت بطباعته هو فقط طباعة لObject أو Class نفسه ولا يقوم بعرض المحتويات، راجع المثال التالي: print(test) <__main__.Test object at 0x7f695dfe1e50> طباعة test object أعطانا نفس الناتج الذي حصلت عليه في عملية الطباعة المنفذة في برنامجك، والناتج عبارة عن نسخة (Object) معرف من Class المسمى Test و الموجود داخل main وهو عبارة عن base_program و الموجود في موقع الذاكرة 0x7f695dfe1e50. اقتباس
0 عبدالله عبدالرحمن11 نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 يمكنك إستخدام __repr__ و __str__ كما في إجابة @عبود سمير اما إذا أردت إستخدم طريقة أسرع فيمكنك إستخدام دالة objprint والذي تقوم بطباعة محتوى أي صنف على شكل قابل للقراءة يمكنك تثبيت الحزمة pip install objprint واستخدامها لطباعة أي كائن كالمثال الآتي from objprint import objprint class Position: def __init__(self, x, y): self.x = x self.y = y class Player: def __init__(self): self.name = "Alice" self.age = 18 self.items = ["axe", "armor"] self.coins = {"gold": 1, "silver": 33, "bronze": 57} self.position = Position(3, 5) objprint(Player()) اقتباس
السؤال
Fahmy Mostafa
عندما أقوم بطباعة أي صنف في بايثون أحصل على نتيجة مشابهة للتالي:
<__main__.Foo instance at 0x7fa2b29d>
هل توجد طريقة لعمل مثل هذه النتيجة عند طباعة صنف قمت بإنشائه بنفسي، بحيث يتم طباعة هذه النتيجة عند إستخدام دالة print لطباعة instance من الصنف
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.