_make الموروثة تتجاوز __new__ المخصصة في مثالنا. [1] [2]
الخلاصة السريعة
- _make الموروثة تتجاوز __new__ المخصصة في مثالنا. [1] [2]
- على CPython 3.12.14، T بحقل value؛ Own(T) تخصص __new__ لتسجيل المدخل ومضاعفته. [1] [2]
- Own._make([4]) تنتج Own بقيمة 4 وسجل فارغ؛ القائمة تبقى [4]. [1] [2]
- _make تستعمل tuple.__new__(cls,iterable) مباشرة. [1] [2]
- تحكم Control(T) مستقل يخصص __new__ بالطريقة نفسها بسجل مستقل؛ Control(4) تعطي 8 وتسجل [4]. لم نخصص _make أو __init__. [1] [2]
التجاوز
الصنف الفرعي
على CPython 3.12.14، T بحقل value؛ Own(T) تخصص __new__ لتسجيل المدخل ومضاعفته. [1] [2]
الصنع الموروث
Own._make([4]) تنتج Own بقيمة 4 وسجل فارغ؛ القائمة تبقى [4]. [1] [2]
from collections import namedtuple T=namedtuple("T","value") own_calls=[] class Own(T): __slots__=() def __new__(cls,value): own_calls.append(value) return T.__new__(cls,value*2) items=[4] own=Own._make(items) print(own.value,type(own) is Own,own_calls,items) [1] [2]
![Control(T); __new__:value*2; Control(4); value:8; control_calls:[4]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1757/python-named-make-subclass-values.png)
استدعاء الصنف
_make تستعمل tuple.__new__(cls,iterable) مباشرة. [1] [2]
control_calls=[] class Control(T): __slots__=() def __new__(cls,value): control_calls.append(value) return T.__new__(cls,value*2) control=Control(4) print(control.value,type(control) is Control,control_calls) [1] [2]
تحكم Control(T) مستقل يخصص __new__ بالطريقة نفسها بسجل مستقل؛ Control(4) تعطي 8 وتسجل [4]. لم نخصص _make أو __init__. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![namedtuple; Own(T); __new__:value*2; Own._make([4]); value:4; own_calls:[]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1757/python-named-make-subclass-main.png)