mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-12-22 12:50:23 +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 из-за "обмана" на уровне реализации.
|
||||
|
||||
---
|
||||
|
||||
|
||||
### ▶ Отношения между подклассами
|
||||
<!-- 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…
x
Reference in New Issue
Block a user