str - tipos de variables en python
¿Dónde se almacena el valor int de una instancia int en Python? (1)
El valor entero real está en ob_ival
. En esencia, int_int
simplemente toma el valor entero de un objeto int
y lo envuelve en otro objeto.
No estoy seguro de por qué no puedes ver las propiedades. Si ejecuto esto, aparecen para mí, en las versiones 2.7 y 3.4:
x = 8
dir(x)
EDITAR: Demasiado difícil de explicar en un comentario, por lo que se agrega a la respuesta.
Podría fácilmente subclasificarlo así:
class foo(int):
def __getitem__(self):
return self + 1
foo(8).__getitem__()
También puede usar super
para acceder explícitamente al objeto int
esta manera.
(Te das cuenta de que __getitem__
es para usar con objetos con clave [como, por ejemplo, dict] y por lo tanto, normalmente obtiene un segundo argumento que especifica la clave, ¿no es así? Y int
y float
no están codificados).
El tipo int
en python ofrece dos atributos llamados numerator
y real
que tienen el mismo contenido que __int__()
.
Como todos estos 3 valores devuelven el mismo atributo interno, creo que real
es una propiedad como:
@property
def real(self):
return self.__int
Sin embargo, no puedo encontrar este dir de propiedad oculto ni a = int(); a._int__<tab>
a = int(); a._int__<tab>
en IPython.
Así que miré el código fuente y encontré esto:
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 */
};
Y esto:
static PyObject *
int_int(PyIntObject *v)
{
if (PyInt_CheckExact(v))
Py_INCREF(v);
else
v = (PyIntObject *)PyInt_FromLong(v->ob_ival);
return (PyObject *)v;
}
Pero esto es lo más lejos que puedo ir solo.
¿Dónde se almacena el valor real de un entero dentro de una instancia entera?
La razón principal de esta pregunta es que quiero extender el tipo de MyFloat
float
con un MyFloat
en el que me gustaría referirme al valor de la instancia.