> >ככל הנראה "import cgi" לא מבצע פעילות כלשהי כשלעצמו שתגרום לו להתנהג מוזר
> > כאשר הוא לא רץ כתסריט CGI. אבל אם פעולת ה-import הייתה עושה משהו כזה, אז
> > לא ניתן היה להשתמש בטריק הזה.
>
> זה לא במקרה. מדובר במודול ספריה סטנדרטית, וככזה ניתן לצפות ממנו להתנהג
> בצורה מקובלת (כלומר, כפי שאמרתי קודם: import לא אמור לעשות דברים משונים)
>

המממ... אם כך, מה הנוהג המקובל בפייתון למצב שהמודול מממש מנשק שדורש אתחול? האם 
הנחת העבודה היא שיש לבצע את האתחול בזמן היצירה של מופע של אובייקט, שהוא מכיל 
את כל הפונקציונליות של המנשק? כלומר כל מה שאני עושה הוא משהו כמו:

<<<
import mymodule;

# No initialization has happened until now.

obj = mymodule.MainObject(1, "hello");

# Now there has been initialization.
>>>

מה שמעניין הוא שלמודול "cgi" יש מחלקה בשם FieldStorage. האם יש לו גם מחלקות 
אחרות לצרכים אחרים של מנשק המתכנת? אם כך, האם כל מחלקה בודקת אם האתחול כבר 
התבצע כאשר היא נוצרה, ואם לא מבצעת את האתחול? משהו כזה:

<<<
inited = 0

def myfunc():
        if not inited:
                Init()
        

def Init():
        # Do the actual initialization
>>>

או אוליי אני פשוט צריך לקרוא את הקוד.

> אגב - סתם למקרה שלא חשבת על זה (זה לא בהכרח יותר טוב) - אין שום דרישה
> שהאוביקט שאתה שם שם יהיה דוקא מודול.
>  כל אוביקט שיש לו attribute בשם FieldStorage יהיה טוב באותה מידה. למשל:
>
> class UseClassAsCGIModule:
>     def FieldStorage():
>         return {"hello":cgi_param("hello")}
>
> class UseInstanceAsCGIModule:
>     def FieldStorage(self):
>         return {"hello":cgi_param("hello")}
>
> #now, you can use either:
> mytestcgi.cgi = UseClassAsCGIModule
> #or:
> mytestcgi.cgi = UseInstanceAsCGIModule()
>

אוקיי. בשל העובדה שפייתון היא שפה עם טיפוסיות דינמית (dynamical typing) וכן 
שפה סימבולית, ניתן להחליף כל אובייקט באובייקט אחר שאינו שייך לו כל עוד שמות 
שגרות המחלקה זהים. גם בפרל זה אותו הדבר. רק ששם אם הקוד מבצע שימוש ב-
$obj->isa("MyClass")
עלולה להיווצר בעייה (אבל בד"כ לא). גם בפייתון אמורה להיות פונקציה דומה המבררת 
אם אובייקט יורש ממחלקה מסוימת אבל זה לא עומד לי על קצה הלשון וידרוש ממני קצת 
חיפוש באינטרנט.

בכבוד רב,

        שלומי פיש

---------------------------------------------------------------------
Shlomi Fish      [EMAIL PROTECTED]
Homepage:        http://www.shlomifish.org/

Tcl is LISP on drugs. Using strings instead of S-expressions for closures
is Evil with one of those gigantic E's you can find at the beginning of 
paragraphs.

לענות