Bu Python kenar durumlarda biridir:
- Python'daki her şey bir nesnedir, bu nedenle
object
her şeyin taban türü olduğundan, type
(Python'da bir şey olmak), object
'un bir örneğidir. object
yana
object
da object
type
bir örneği yapan bir tip,, taban türü her şeyin olup. bu ilişki size Python kendi şeyler ile çoğaltabilirsiniz şey olmadığını
Not. Bu, dile yerleşik tek bir istisnadır. uygulama tarafında
, iki isim
PyBaseObject_Type
(
object
için) ve
PyType_Type
(
type
için) ile temsil edilir.
type_is_subtype_base_chain(PyTypeObject *a, PyTypeObject *b)
{
do {
if (a == b)
return 1;
a = a->tp_base;
} while (a != NULL);
return (b == &PyBaseObject_Type);
}
Bu aslında a
tipi hiyerarşisini yukarı gidiyor tutar ve kontrol eder: Eğer isinstance
kullandığınızda
, tip check-in çok son adımda, her şey başarısız oldu-edilir type_is_subtype_base_chain
tarafından yapılır sonra b
'a karşı sonuç türü. Bulamazsa, son çare b
'un aslında object
olup olmadığını kontrol etmektir, bu durumda işlev true olarak geri döner: her şey bir nesnedir. Yani “her şey bir object
örneğidir” kısmı aslında örnek kontrolüne kodlanmıştır.
PyTypeObject PyBaseObject_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"object", /* tp_name */
sizeof(PyObject), /* tp_basicsize */
…
PyVarObject_HEAD_INIT
esasen taban türü dahil, çekirdek türü bilgisi şeyler ayarlar: basitçe declaration of PyBaseObject_Type
bu şekilde tanımlanmış çünkü
Ve object
bir type
neden gelince
, bu aslında daha basittir
PyType_Type
.Her şey bir nesnedir yana
object
da
object
bir örneğidir,
Bu davranışı sanal alt sınıflar ile taklit edebildiğinizden eminim. – Dunes