В Python объекты хранят свои атрибуты в словарях, доступ к которым можно получить через магический атрибут dict:
class A: pass
a = A()
a.x = 1
a.__dict__
# {'x': 1}
При прямом до…
Читать далее →
Если вы хотите перехватить и IndexError, и KeyError, вы можете и должны использовать LookupError — их общего предка. Это оказывается полезным при работе со сложными вложенными данн…
Читать далее →
Каждый класс Python имеет два «магических» атрибута, которые можно использовать для получения информации о его базовых классах.
Каждый класс Python имеет два «магических» атрибута, которые можно использовать для получения информации о его базовых классах.
Первый — __bases__; он возвращает непосредственных родителей класса:
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
print(D.__bases__)
# (<class '__main__.B'>, <class '__main__.C'>)
Второй —```python
class B``` он возвращает кортеж со всеми классами, которые задействованы при разрешении методов (отсюда и название), то есть родителей, их родителей и так далее:
print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
👉 @BookPython
В Python операторы += и + являются разными. За их поведение отвечают методы __iadd__ и __add__ соответственно.
class A:
def __init__(self, x):
self.x = x
def __ia…
Читать далее →
В Python блок else может располагаться не только после if, но и после for и while. Код внутри else выполняется, если цикл не был прерван оператором break.
Обычный способ использов…
Читать далее →