2008-12-18 2 views
1

J'ai un bloc de code qui initialise fondamentalement plusieurs classes, mais elles sont placées dans un ordre séquentiel, car les plus récentes référencent les premières.Le code n'attend pas l'initialisation de la classe!

Pour une raison quelconque, le dernier s'initialise avant le premier ... il me semble qu'il y a une sorte de threading en cours. Ce que je dois savoir, c'est comment puis-je l'empêcher de faire cela?

Y a-t-il un moyen de faire en sorte que l'init de classe fasse quelque chose de similaire à l'envoi d'une valeur de retour?

Ou peut-être que je pourrais utiliser la classe dans une instruction if de sorte à vérifier si la classe a déjà été initialisée?

Je suis un peu nouveau sur Python et je migre de C, donc je m'habitue toujours aux petites différences comme les conventions de nommage.

+0

Code postal, s'il vous plaît. Le "init envoyant une valeur de retour" indique quelques problèmes conceptuels potentiels. –

+0

Pouvez-vous nous donner du code? Il est difficile de comprendre votre problème si nous ne savons pas ce que vous faites. En outre, essayez de placer des instructions d'impression dans vos constructeurs pour voir l'ordre d'instanciation. – Dan

Répondre

0

Python jusqu'à 3.0 a un verrou global, donc tout fonctionne dans un seul thread et dans l'ordre. Je suppose que certains effets secondaires initialise la dernière classe à partir d'un endroit différent de ce que vous attendez. Lancez une exception dans __init__ de cette dernière classe pour voir où elle est appelée.

+0

Py3k ne supprime pas GIL AFAIK. – muhuk

0

Problème d'espace ou d'onglet ... ugh. >.>

Eh bien, au moins cela fonctionne maintenant. J'avoue que je rate les accolades de C au lieu de l'indentation forcée. C'est très pratique en tant que langage de prototypage. Peut-être que je deviendrai plus aimant quand je l'aurai mieux compris.

+0

Ainsi parla le Seigneur: Tu indenteras avec quatre espaces. Ni plus ni moins. Quatre seront le nombre d'espaces que vous indentez, et le nombre de ton indentation sera de quatre. Huit ne tirez-vous pas, ni n'indenserez-vous deux, excepté que vous continuerez alors à quatre. Les onglets sont juste sortis. –

+0

Chaque débutant Python a ce problème. Utilisez-le juste pour une semaine et vous vous y habituerez; De plus, vous commencerez à voir à quel point cela rendra votre vie plus simple. Cela dit, obtenez un éditeur qui corrige l'indentation pour vous. –

+0

Bientôt, vous trouverez que l'exigence d'indentation est une bénédiction, pas une malédiction. J'ai vu beaucoup de code C illisible avec des accolades cachées de la manière la plus obscure. Je n'ai jamais rien vu de tel en Python. Vous dites simplement à votre éditeur de ne pas utiliser TAB. – Ber

Questions connexes