Egy egykori rendszergazda játszadozása a pythonnal

Pythonkodó

Pythonkodó

Eclipse+pydev kódkiegészítés

2015. január 21. - pythonozok

Sajnos a pydev e téren... hát finoman szólva nem tökéletes. A példányváltozókkal valamiért nem boldogul. Hiába próbáltam a sok helyen javasolt ú.n. "type hinting" használatát, az értékadás után elhelyezett assert isinstance(...)-t, nem akart működni. (gyk: példányváltozó alatt a "self.x" formában megadott változókat értem)
Többnyire nincs velük gond, de a szerkesztés alatt álló forrásfájlban nincs közvetlen értékadás elhelyezve, hanem paraméterként érkezik egy objektum valahonnan kívülről, akkor nem működik a kódkiegészítés.

Példa:

import Tkinter

class A(Object):
  def __init__(self, parameter):
    '''
    @type parameter: Tkinter.Button
    '''
    self.valtozo=parameter

 

A fenti példában a következő sorba írva ezt:
    parameter.
majd a pont után ctrl-space kombinációt nyomva, kapok egy listát a Tkinter.Button osztály metódusairól, publikus attribútumairól stb., ahogy elvárható. De... ha a parameter helyett azt írom, hogy "self.valtozo." (természetesen idézőjelek nélkül) és úgy nyomom a ctrl-space-t, akkor már nem kapok listát, max. abban az esetben, ha az osztály forráskódján belül valahol már elejtettem hivatkozást a "self.valtozo" valamely elemére, mert azokat fel tudja ajánlani.
Egy elég gusztustalan "megoldást" találtam ki a probléma megkerülésére: létre kell hozni az osztályon belül egy metódust, ami sohasem fut le, abban a példányváltozónak olyan értéket adni közvetlenül, amilyen típusú az valójában lenne és voilà! :)

  def just_for_pydev_code_completion(self):
    raise Exception("Just for pydev (not to use)!")
    self.valtozo=Tkinter.Button()

Ha ennyivel kiegészítem a fenti osztálydefiníciót, akkor a pydev máris tudni fogja, hogy a self.valtozo a Tkinter.Button osztály egy példánya. Háááát... ha valaki tud jobb, kulturált(abb), működő(!!!) megoldást, nyugodtan szóljon! A stackoverflow-n talált ötleteket végigpróbáltam, a fenti variációra egyik sem működött.

Update: Rosszabb a helyzet, mint hittem... :( A forrásfájlban bárhol hivatkozom egy "self.xxx" változóra úgy, hogy látszólag egy osztály új példányát adom neki értékül, a pydev minden osztályon belül úgy fogja kezelni a self.xxx változót, mintha az adott osztály egy példánya lenne. Magyarán ha egy másik osztályban is használok self.xxx-t valami egészen más céllal, akkor is úgy fog viselkedni, mintha...

A bejegyzés trackback címe:

https://pythonkodo.blog.hu/api/trackback/id/tr517096311

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása