diff --git a/translations/README-ru.md b/translations/README-ru.md index 3d299f3..e79facc 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1050,3 +1050,28 @@ False - Эти отношения между `object` и `type` (оба являются экземплярами друг друга, а также самих себя) существуют в Python из-за "обмана" на уровне реализации. --- + + +### ▶ Отношения между подклассами + +**Вывод:** +```py +>>> from collections import Hashable +>>> issubclass(list, object) +True +>>> issubclass(object, Hashable) +True +>>> issubclass(list, Hashable) +False +``` + +Предполагается, что отношения подклассов должны быть транзитивными, верно? (т.е. если `A` является подклассом `B`, а `B` является подклассом `C`, то `A` _должен_ быть подклассом `C`) + +#### 💡 Объяснение + +* Отношения подклассов не обязательно являются транзитивными в Python. Можно переопределить магический метод `__subclasscheck__` в метаклассе. +* Когда вызывается `issubclass(cls, Hashable)`, он просто ищет не-фальшивый метод "`__hash__`" в `cls` или во всем, от чего он наследуется. +* Поскольку `object` является хэшируемым, а `list` - нехэшируемым, это нарушает отношение транзитивности. +* Более подробное объяснение можно найти [здесь] (https://www.naftaliharris.com/blog/python-subclass-intransitivity/). + +---