Код: Выделить всё
class A:
def __del__(self):
print("A.__del__")
class B:
def __del__(self):
print("B.__del__")
a = A()
b = B()
Код: Выделить всё
A.__del__
B.__del__
Что мне нужно, так это принудительно установить порядок сбора мусора , чтобы a был уничтожен после b. Я попробовал сохранить внутри b:
Код: Выделить всё
b._guard = a
В моем реальном случае используется pybind11, где дедушка и бабушка создают родителя, который затем создает дочерний элемент, и этот дочерний элемент должен быть уничтожен раньше дедушки и бабушки. Сохранение бабушки и дедушки внутри дочернего элемента, похоже, работает, но в этом простом случае, о котором я спрашиваю, это явно не так, поэтому я не думаю, что это надежное решение.
Похоже, что py::keep_alive мог бы помочь мне, если бы мой случай был родительским и дочерним, но поскольку между бабушкой и дедушкой нет связи, я думаю, что это не имеет значения.
Есть ли чистый питонический способ (или аккуратный способ pybind11), чтобы заставить дедушку и бабушку оставаться в живых до тех пор, пока не будет очищен дочерний элемент?>
Подробнее здесь: https://stackoverflow.com/questions/783 ... to-collect