Bonjour à tous,
Voici un exemple de code qui me déroute actuellement... :
Le fichier Foo.py :
Le fichier bar.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 from bar import* class Foo(): pass if __name__ == "__main__": A = Foo() print("type de A : ", type(A)) print("A est une instance de Foo : ", isinstance(A, Foo)) B = bar(A, A) print("type de B : ", type(B)) print("C est une instance de Foo : ", isinstance(B, Foo))
L'exécution de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 from Foo import * def bar(A, B): return Foo()produit le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part python3 Foo.py
Au contraire de cela, je m'attendais à ce que les objets A et B soient des instances de la classe Foo. Mais non...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 type de A : <class '__main__.Foo'> A est une instance de Foo : True type de B : <class 'Foo.Foo'> B est une instance de Foo : False
J'imagine que cela a été pensé et n'ai en fait pas un problème. Mais je ne comprends pas la logique derrière, ni comment modifier l'appel de insistance pour qu'il renvoient true dans les trois cas...
Derrière tout cela, mon objectif est de pouvoir écrire un code du type :
sachant que mes objets pourront être crées aussi bien dans la fonction bar(a, b) du fichier bar.py que dans le if __name__ == '__main__': du fichier Foo.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 from bar import* from bar import* class Foo(): def foo(self, bar): if isinstance(bar, Foo): pass
Merci d'avance à tous pour votre aide et vos explications.
Partager