From 446a3a09bb04556dc5d2423339b1e8845ec18b0e Mon Sep 17 00:00:00 2001 From: Vadim Nifadev <36514612+nifadyev@users.noreply.github.com> Date: Sun, 21 Apr 2024 10:32:21 +0300 Subject: [PATCH] Translate Chicken egg problem example --- translations/README-ru.md | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/translations/README-ru.md b/translations/README-ru.md index 09df51c..3d299f3 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -999,3 +999,54 @@ ClosureVars(nonlocals={}, globals={}, builtins={}, unbound=set()) ``` --- + + +### ▶ Проблема курицы и яйца * + +1\. +```py +>>> isinstance(3, int) +True +>>> isinstance(type, object) +True +>>> isinstance(object, type) +True +``` + +Так какой же базовый класс является "окончательным"? Кстати, это еще не все, + +2\. + +```py +>>> class A: pass +>>> isinstance(A, A) +False +>>> isinstance(type, type) +True +>>> isinstance(object, object) +True +``` + +3\. + +```py +>>> issubclass(int, object) +True +>>> issubclass(type, object) +True +>>> issubclass(object, type) +False +``` + + +#### 💡 Объяснение + +- `type` - это [метакласс](https://realpython.com/python-metaclasses/) в Python. +- **Все** в Python является `объектом`, что включает в себя как классы, так и их объекты (экземпляры). +- Класс `type` является метаклассом класса `object`, и каждый класс (включая `type`) наследуется прямо или косвенно от `object`. +- У `object` и `type` нет реального базового класса. Путаница в приведенных выше фрагментах возникает потому, что мы думаем об этих отношениях (`issubclass` и `isinstance`) в терминах классов Python. Отношения между `object` и `type` не могут быть воспроизведены в чистом Python. Точнее говоря, следующие отношения не могут быть воспроизведены в чистом Python, + + класс A является экземпляром класса B, а класс B является экземпляром класса A. + + класс A является экземпляром самого себя. +- Эти отношения между `object` и `type` (оба являются экземплярами друг друга, а также самих себя) существуют в Python из-за "обмана" на уровне реализации. + +---