mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 02:54:25 +01:00
Translate Sublass relationships example
This commit is contained in:
parent
446a3a09bb
commit
a32eaca58f
25
translations/README-ru.md
vendored
25
translations/README-ru.md
vendored
@ -1050,3 +1050,28 @@ False
|
|||||||
- Эти отношения между `object` и `type` (оба являются экземплярами друг друга, а также самих себя) существуют в Python из-за "обмана" на уровне реализации.
|
- Эти отношения между `object` и `type` (оба являются экземплярами друг друга, а также самих себя) существуют в Python из-за "обмана" на уровне реализации.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
### ▶ Отношения между подклассами
|
||||||
|
<!-- Example ID: 9f6d8cf0-e1b5-42d0-84a0-4cfab25a0bc0 --->
|
||||||
|
**Вывод:**
|
||||||
|
```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/).
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user