Bonjour à tous,

Voici un exemple de code qui me déroute actuellement... :

Le fichier Foo.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))
Le fichier bar.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
from Foo import *
 
def bar(A, B):
    return Foo()
L'exécution de produit le résultat suivant :
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
Au contraire de cela, je m'attendais à ce que les objets A et B soient des instances de la classe Foo. Mais non...

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 :
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
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

Merci d'avance à tous pour votre aide et vos explications.