type - python functions



أين يتم تخزين القيمة إنت من مثيل إنت في بيثون؟ (1)

القيمة الصحيحة الفعلية في ob_ival . في جوهرها، int_int هو ببساطة أخذ القيمة الصحيحة من كائن int واحد والتفاف عليه في كائن آخر.

لست متأكدا لماذا لا يمكنك رؤية الخصائص. إذا كنت تشغيل هذا، فإنها تظهر بالنسبة لي، في كل 2.7 و 3.4 الإصدارات:

x = 8
dir(x)

تحرير: من الصعب جدا أن أشرح في تعليق، لذلك إضافة إلى الجواب.

هل يمكن بسهولة فرعية مثل هذا:

class foo(int):
    def __getitem__(self):
        return self + 1

foo(8).__getitem__()

هل يمكن أيضا استخدام super للوصول صراحة الكائن int بهذه الطريقة.

(هل تدرك أن __getitem__ هو للاستخدام مع كائنات كيد [ديكت-ليك، ويقول]، وبالتالي عادة يحصل على وسيطة ثانية تحديد المفتاح، أليس كذلك؟ و int و float ليست مفتاح.)

نوع int في بيثون يقدم سمتين اسمه numerator real التي لها نفس المحتوى __int__() .

كما أن كل هذه القيم 3 ترجع نفس السمة الداخلية، أعتقد real هو خاصية مثل:

@property
def real(self):
   return self.__int

ومع ذلك لا أستطيع أن أجد هذا الخفية دير dir أو إما a = int(); a._int__<tab> a = int(); a._int__<tab> في إبيثون.

لذلك نظرت إلى شفرة المصدر وجدت هذا:

static PyGetSetDef int_getset[] = {
    {"real",
     (getter)int_int, (setter)NULL,
     "the real part of a complex number",
     NULL},
    {"imag",
     (getter)int_get0, (setter)NULL,
     "the imaginary part of a complex number",
     NULL},
    {"numerator",
     (getter)int_int, (setter)NULL,
     "the numerator of a rational number in lowest terms",
     NULL},
    {"denominator",
     (getter)int_get1, (setter)NULL,
     "the denominator of a rational number in lowest terms",
     NULL},
    {NULL}  /* Sentinel */
};

وهذا:

static PyObject *
int_int(PyIntObject *v)
{
    if (PyInt_CheckExact(v))
        Py_INCREF(v);
    else
        v = (PyIntObject *)PyInt_FromLong(v->ob_ival);
    return (PyObject *)v;
}

ولكن هذا أبعد يمكن أن أذهب من نفسي.

حيث يتم تخزين القيمة الفعلية لعدد صحيح داخل مثيل صحيح؟

السبب الرئيسي لهذا السؤال هو أنني أريد أن تمديد نوع float مع MyFloat حيث أود أن أشير إلى قيمة المثيل.





integer