Salut !
Je suis débutant en Python donc j'ai un peu de mal avec la POO. J'utilise le module Image (from PIL import Image)
Je veux créer une classe B (FractalImage)qui hérite de la classe A (Image.Image). Le problème c'est qu'il y a une fonction (Image.open)dans le module que j'ai importé (Image) qui renvoie des objets de classe Image.Image indispensable.
Si je fais im = Image.open("img.jpg") par exemple, j'ai accès à toutes les méthodes de Image.Image et non celles de FractalImage.
C'est là que je bloque. Merci.
Salut,
Je ne connais pas du tout ce module, et du coup j'ai du mal à comprendre la situation comme ça... Hors contexte c'est compliqué...
Mais en gros, ton problème, c'est un conflit entre deux méthodes de deux modules différents qui possèdent le même nom, non ?
Deux méthodes open() ?
J'ai du mal à saisir, car si B hérite de A, alors B possède toutes les méthodes de A, mais aussi celles que tu lui as donné... Si tu redéfinies une méthode de A, celle-ci sera " écrasée "....
Ahhh non c'est bon je crois je viens de comprendre, excuse moi... M'a fallu relire plusieurs fois.
Hé bien, il suffit de faire im = Fractallmage("img.jpg")
Tu passes ainsi ton paramètre à l'initialisateur de ton objet, après suffit d'appeler la dite fonction Image.open() dans l'initialisateur de l'objet.
Merci beaucoup.
Avec
def __init__(self, imagelocation):
self = Image.open(imagelocation)
je peux bien faire :
frac = FractalImage("../unnamed.png")
Malheureusement quand je tape frac j'ai une réponse bizarre :
>>> frac
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/PIL/Image.py", line 608, in __repr__
self.mode, self.size[0], self.size[1],
File "/usr/local/lib/python3.4/dist-packages/PIL/Image.py", line 632, in __getattr__
raise AttributeError(name)
AttributeError: mode
Faut que je me documente sur la POO. J'en ai pas spécifiquement besoin mais pour des soucis esthétiques je préfère l'utiliser.
Ouai, t'utilises pas la bonne méthode.
En fait, toi, tu redéfinis carrément self :
self = Image.open(blabla)
Ça ne se fait pas en Python... Absolument jamais... En gros, tu viens de transformer ton objet Fractallmage... En l'objet que renvoie Image.open(blabla).
Tu comprends ce que je veux dire ?
self c'est l'instance de ton objet... Donc si tu fais par exemple self = 6... Hé bien tu transformes l'instance de ton objet en instance de 6... :/
En fait, il faut que tu fasses self.attribut = Image.open(blabla)
Et pour avoir accès au bordel renvoyé, tu utilises self.attribut.
Les namespaces aussi c'est utile pour pas tout mélanger.