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