J'ai réfléchi à la façon dont j'écris des classes en Python. Plus précisément comment le constructeur est implémenté et comment l'objet doit être détruit. Je ne veux pas me fier au comptage de références de CPython pour faire le nettoyage d'objet. Cela me dit essentiellement que je devrais utiliser des instructions pour gérer les durées de vie de mes objets et que j'ai besoin d'une méthode close/disposition explicite (cette méthode pourrait être appelée depuis __exit__
si l'objet est également un gestionnaire de contexte).Est-ce que c'est vraiment OK de fermer/jeter des objets dans __del__?
class Foo(object):
def __init__(self):
pass
def close(self):
pass
Maintenant, si tous mes objets se comportent de cette manière et tout mon code utilise des déclarations ou des appels explicites à close()
(ou dispose()
) Je ne vois pas vraiment la nécessité pour moi de mettre un code dans __del__
. Devrions-nous vraiment utiliser __del__
pour disposer de nos objets?
Je ne veux pas me fier au comptage de références de CPython pour effectuer le nettoyage d'objet. Pourquoi pas sur terre? Quel est le problème avec le comptage des références d'objets? –
@ S.Lott, le comptage de référence n'est pas là si vous déplacez votre code vers un environnement avec une récupération de place plus avancée, comme Jython ou IronPython - et si un jour CPython (par exemple via Unladen Swallow) est traîné en criant dans le 21ème siècle, aussi? Je suis d'accord avec le PO sur le fait de ne pas compter sur RC dans mes bibliothèques portatives et réutilisables (par opposition aux modules à usage unique, jetables, scripts et mineures). –
@ S.Lott: Alex a déjà répondu à votre question. Une autre bonne raison de vouloir ne pas compter sur le comptage des références est l'ECE issue du projet PyPy. Les personnes derrière elle semblent être optimistes quant à sa capacité à fournir des accélérations substantielles par rapport à CPython. – Arlaharen