ארטיקלען

פּיטהאָן און אַוואַנסירטע מעטהאָדס, דאַנדער פאַנגקשאַנז פֿאַר בעסער פּראָגראַממינג

פּיטהאָן איז אַ פאַנטאַסטיש פּראָגראַממינג שפּראַך, און ווי עווידאַנסט דורך גיטהוב, איז אויך די צווייט מערסט פאָלקס שפּראַך אין 2022.

די מערסט טשיקאַווע אַדוואַנטידזשיז פון Python זענען די גרויס קהל פון פּראָוגראַמערז.

עס מיינט אַז Python האט אַ פּעקל פֿאַר קיין נוצן פאַל.

אין די וואַסט וועלט פון פּיטהאָן פּראָגראַממינג, עס איז אַ סכום פון פֿעיִקייטן וואָס אָפט גיין אַננאָוטיסט דורך ביגינערז, אָבער האָבן אַ באַטייטיק וויכטיקייט אין די יקאָוסיסטאַם פון דער שפּראַך.

מאַגיש מעטהאָדס זענען אַ סכום פון פאַר-מיטלעןdefiניטעס אין פּיטהאָן וואָס צושטעלן ספּעציעל סינטאַקטיק פֿעיִקייטן. זיי זענען לייכט דערקענט דורך זייער טאָפּל דאַשאַז אין די אָנהייב און סוף, ווי __init__, __call__, __len__ … עטק.

די מאַדזשיקאַל מעטהאָדס

מאַגיש מעטהאָדס לאָזן מנהג אַבדזשעקץ צו ביכייווז ענלעך צו די געבויט-אין פּיטהאָן טייפּס.

אין דעם אַרטיקל, מיר וועלן פאָקוס אויף די שטאַרק דאַנדער פאַנגקשאַנז. מיר וועלן ויספאָרשן זייער ציל און דיסקוטירן זייער נוצן.

צי איר זענט אַ פּיטהאָן אָנהייבער אָדער אַ יקספּיריאַנסט פּראָגראַמיסט, דער אַרטיקל יימז צו צושטעלן אַ פולשטענדיק פארשטאנד פון דאַנדער פאַנגקשאַנז, מאכן דיין פּיטהאָן קאָדירונג דערפאַרונג מער עפעקטיוו און ענדזשויאַבאַל.

געדענקט, די מאַגיש פון Python ליגט ניט בלויז אין זיין פּאַשטעס און ווערסאַטילאַטי, אָבער אויך אין זיין שטאַרק פֿעיִקייטן ווי Dunder פאַנגקשאַנז.

__יניט__

טאָמער די מערסט יקערדיק דאַנדער פונקציע פון ​​​​אַלע. דאָס איז דער מאַגיש אופֿן וואָס פּיטהאָן אויטאָמאַטיש רופט ווען מיר שאַפֿן (אָדער ווי דער נאָמען סאַגדזשעס, ינישאַלייז) אַ נייַע כייפעץ.__init__

קלאַס פּיצאַ:
דעף __יניט__ (זיך, גרייס, טאַפּינגז):
self.size = גרייס
self.topings = טאַפּינגז

# יעצט לאמיר מאכן א פיצע
my_pizza = פּיצאַ ('גרויס', ['פּעפּעראָני', 'מאַשרומז'])

print(my_pizza.size) # דאָס וועט דרוקן: גרויס
print(my_pizza.toppings) # דאָס וועט דרוקן: ['פּעפּעראָני', 'מאַשרומז']

אין דעם בייַשפּיל, אַ קלאַס גערופן פּיצאַ איז באשאפן. מיר שטעלן אונדזער __init__ פֿונקציע צו אַרייַננעמען פּאַראַמעטערס צו ספּעציפיצירן אין יניטיאַליזאַטיאָן צייט, און שטעלן זיי ווי פּראָפּערטיעס פֿאַר אונדזער מנהג כייפעץ.

דאָ, עס איז געניצט צו פאָרשטעלן דעם בייַשפּיל פון די קלאַס. אַזוי ווען מיר שרייַבן self.size = גרייס, מיר זאָגן, "היי, דעם פּיצע כייפעץ האט אַ אַטריביוט גרייס size, און איך ווילן עס צו זיין וועלכער גרייס איך צוגעשטעלט ווען איך באשאפן דעם כייפעץ".

__סטר__ און __repr__

__סטר__

דאָס איז די מאַגיש אופֿן פון Python וואָס אַלאַוז אונדז צו defiגעבן אַ באַשרייַבונג פֿאַר אונדזער מנהג נומער.

ווען איר דרוקן אַ כייפעץ אָדער גער עס צו אַ שטריקל ניצן str(), Python טשעק אויב איר האָבן defiאיך האב פארשטאנען א שיטה __str__ פֿאַר דעם כייפעץ ס קלאַס.

אויב אַזוי, נוצן דעם אופֿן צו בייַטן די כייפעץ צו אַ שטריקל.

מיר קענען פאַרברייטערן אונדזער פּיצאַ בייַשפּיל צו אַרייַננעמען אַ פֿונקציע __str__ ווי גייט:

קלאַס פּיצאַ: דעף __יניט__ (זיך, גרייס, טאַפּינגז): self.size = גרייס self.toppings = טאַפּינגז דעף __str__ (זיך): צוריקקומען f"א {self.size} פּיצע מיט {', '.join(self.toppings )}" my_pizza = פּיצאַ('גרויס', ['פּעפּעראָני', 'מאַשרומז']) print(my_pizza) # דאס וועט דרוקן: א גרויסע פּיצע מיט פעפעראָני, מאַשרומז
__repr__

די __str__ פֿונקציע איז מער אַ ינפאָרמאַל וועג צו דיסקרייבינג די פּראָפּערטיעס פון אַ כייפעץ. אויף די אנדערע האַנט, __repr__ איז געניצט צו צושטעלן אַ מער פאָרמאַל, דיטיילד און אַנאַמביגיואַס באַשרייַבונג פון די מנהג כייפעץ.

אויב איר רופן repr() אויף אַ כייפעץ אָדער איר נאָר דרוקן די כייפעץ נאָמען אין די קאַנסאָול, Python וועט קוקן פֿאַר אַ אופֿן __repr__.

Se __str__ ס 'איז נישט defiניט, פּיטהאָן וועט נוצן __repr__ ווי אַ באַקאַפּ ווען טריינג צו דרוקן די כייפעץ אָדער גער עס צו אַ שטריקל. אַזוי עס איז אָפט אַ גוט געדאַנק defiענדיקן בייַ מינדסטער __repr__, אפילו אויב איר טאָן ניט defiקומט ארויס __str__.

דאָ ס ווי מיר קען defiענדיקן __repr__ פֿאַר אונדזער פּיצאַ בייַשפּיל:

קלאַס פּיצאַ:
דעף __יניט__ (זיך, גרייס, טאַפּינגז):
self.size = גרייס
self.topings = טאַפּינגז

דעף __repr__ (זיך):
צוריקקומען f"Pizza('{self.size}', {self.topings})"

my_pizza = פּיצאַ ('גרויס', ['פּעפּעראָני', 'מאַשרומז'])
print(repr(my_pizza)) # דאָס וועט דרוקן: פּיצאַ('גרויס', ['פּעפּעראָני', 'מאַשרומז'])

__repr__ גיט איר אַ שטריקל אַז איר קענען לויפן ווי אַ פּיטהאָן באַפֿעל צו ריקריייט די פּיצע כייפעץ, כוועראַז __str__ גיט איר אַ מער מענטש באַשרייַבונג. איך האָפֿן עס העלפּס איר קייַען די דאַנדער מעטהאָדס אַ ביסל בעסער!

__לייג צו__

אין Python, מיר אַלע וויסן אַז עס איז מעגלעך צו לייגן נומערן ניצן די אָפּעראַטאָר +, ווי 3 + 5.

אָבער וואָס אויב מיר ווילן צו לייגן ינסטאַנסיז פון עטלעכע מנהג כייפעץ?

די דאַנדער פֿונקציע __add__ עס אַלאַוז אונדז צו טאָן פּונקט אַז. עס גיט אונדז די פיייקייַט צו defiניט די נאַטור פון דער אָפּעראַטאָר + אויף אונדזער פערזענליכען זאכן.

אין דעם אינטערעס פון קאָנסיסטענסי, לאָזן ס יבערנעמען מיר וועלן צו defiענדיקן די נאַטור פון + אויף אונדזער פּיצאַ בייַשפּיל. זאל ס זאָגן אַז ווען מיר לייגן צוויי אָדער מער פּיצאַז צוזאַמען, עס וועט אויטאָמאַטיש פאַרבינדן אַלע זייער טאַפּינגז. דאָ ס וואָס עס קען קוקן ווי:

קלאַס פּיצאַ:
דעף __יניט__ (זיך, גרייס, טאַפּינגז):
self.size = גרייס
self.topings = טאַפּינגז

דעף __אַדד__ (זיך, אנדערע):
אויב נישט איז (אנדערע, פּיצאַ):
כאַפּן טיפּערראָר ("איר קענט בלויז לייגן אן אנדער פּיצאַ!")
ניו_טאָפּינגס = זיך.טאָפּינגס + אנדערע.טאַפּינגז
צוריקקומען פּיצאַ (זיך. גרייס, נייַ_טאַפּינגס)

# לאָמיר מאַכן צוויי פּיצעס
pizza1 = פּיצאַ('גרויס', ['פּעפּעראָני', 'מאַשרומז'])
pizza2 = פּיצאַ('גרויס', ['אָליוועס', 'אַנאַנאַס'])

# און יעצט לאמיר זיי " צוגעבן "
קאַמביינד_פּיצאַ = פּיצאַ1 + פּיצאַ2

print(combined_pizza.toppings) # דאָס וועט דרוקן: ['פּעפּעראָני', 'מאַשרומז', 'אָליוועס', 'אַנאַנאַס']

אזוי ווי דונדער __add__, מיר קענען אויך defiענדיקן אנדערע אַריטמעטיק פאַנגקשאַנז אַזאַ ווי __sub__ (דורך כיסער ניצן די אָפּעראַטאָר -) און __mul__ (פֿאַר קייפל ניצן די אָפּעראַטאָר *).

__לענ__

דעם דאַנדער אופֿן אַלאַוז אונדז צו defiענדיקן וואָס די פֿונקציע len() מוזן צוריקקומען פֿאַר אונדזער קאַסטאַמייזד זאכן.

פּיטהאָן ניצט len() צו באַקומען די לענג אָדער גרייס פון אַ דאַטן סטרוקטור אַזאַ ווי אַ רשימה אָדער שטריקל.

אין דעם קאָנטעקסט פון אונדזער בייַשפּיל, מיר קען זאָגן אַז די "לענג" פון אַ פּיצאַ איז די נומער פון טאַפּינגז עס האט. דאָ ס ווי מיר קענען ינסטרומענט עס:

קלאַס פּיצאַ:
דעף __יניט__ (זיך, גרייס, טאַפּינגז):
self.size = גרייס
self.topings = טאַפּינגז

דעף __len__ (זיך):
return len(self.topings)

# לאָמיר מאַכן אַ פּיצע
my_pizza = פּיצאַ ('גרויס', ['פּעפּעראָני', 'מאַשרומז', 'אָליוועס'])

print(len(my_pizza)) # דאָס וועט דרוקן: 3

אין די __len__ אופֿן, מיר נאָר צוריקקומען די לענג פון דער רשימה toppings. איצט, len(my_pizza) עס וועט זאָגן אונדז ווי פילע טאַפּינגז זענען אויף עס my_pizza.

__ פּראָצעס __

דעם דאַנדער אופֿן אַלאַוז אַבדזשעקץ צו זיין יטעראַבאַל, ד"ה עס קענען זיין געוויינט אין אַ פֿאַר שלייף.

צו טאָן דאָס, מיר מוזן אויך defiענדיקן די פֿונקציע __next__, דאס איז געניצט פֿאַר defiניש די נאַטור וואָס זאָל צוריקקומען די ווייַטער ווערט אין די יטעראַטיאָן. עס זאָל אויך סיגנאַל די יטעראַבלע אויף דער געשעעניש אַז עס זענען ניט מער עלעמענטן אין די סיקוואַנס. מיר טיפּיקלי דערגרייכן דעם דורך פארווארפן אַ ויסנעם StopIteration.

פֿאַר אונדזער פּיצע בייַשפּיל, לאָזן ס זאָגן מיר ווילן צו יטערייט די טאַפּינגז. מיר קענען מאַכן אונדזער פּיצאַ קלאַס יטעראַבאַל defiנעדאָ אַ אופֿן __iter__:

קלאַס פּיצאַ:
דעף __יניט__ (זיך, גרייס, טאַפּינגז):
self.size = גרייס
self.topings = טאַפּינגז

דעף __iter__ (זיך):
self.n = 0
צוריקקומען זיך

דעף __ווייַטער __ (זיך):
if self.n <len(self.topings):
רעזולטאַט = self.topings[self.n]
self.n += 1
צוריקקומען רעזולטאַט
אַנדערש:
כאַפּן StopIteration

# לאָמיר מאַכן אַ פּיצע
my_pizza = פּיצאַ ('גרויס', ['פּעפּעראָני', 'מאַשרומז', 'אָליוועס'])

# און יעצט לאמיר איבער דעם איבערחזרן
פֿאַר טאַפּינג אין מיין_פּיצאַ:
דרוק (טאַפּינג)

אין דעם פאַל, די פֿאַר שלייף רופט __iter__, וואָס ינישאַלייזיז אַ טאָמבאַנק (self.n) און קערט די פּיצאַ כייפעץ זיך (self).

דערנאָך, די פֿאַר שלייף רופט __next__ צו באַקומען יעדער טאַפּינג אין קער.

ווען __next__ אומגעקערט אַלע געווירץ, StopIteration עס ווארפט ער אַן אויסנאַם און די פֿאַר שלייף איצט ווייסט אַז עס זענען ניט מער טאַפּינגז און אַזוי וועט אַבאָרט די יטעראַטיאָן פּראָצעס.

Ercole Palmeri

כידעש נוזלעטער
דו זאלסט נישט פאַרפירן די מערסט וויכטיק נייַעס וועגן כידעש. צייכן אַרויף צו באַקומען זיי דורך E- בריוו.
טאַגס: פּיטהאָן

לעצטע ארטיקלען

Veeam פֿעיִקייטן די מערסט פולשטענדיק שטיצן פֿאַר ראַנסאָמוואַרע, פֿון שוץ צו ענטפער און אָפּזוך

Coveware דורך Veeam וועט פאָרזעצן צו צושטעלן ענטפער באַדינונגס פֿאַר סייבער יקסטאָרשאַן אינצידענט. קאָוועוואַרע וועט פאָרשלאָגן פאָרענסיקס און רימעדייישאַן קייפּאַבילאַטיז ...

קסנומקס אפריל קסנומקס

גרין און דיגיטאַל רעוואלוציע: ווי פּרידיקטיוו וישאַלט איז טראַנספאָרמינג די אָיל און גאַז אינדוסטריע

פּרידיקטיוו וישאַלט איז רעוואַלושאַנייזינג די ייל & גאַז סעקטאָר, מיט אַן ינאַווייטיוו און פּראָואַקטיוו צוגאַנג צו פאַבריק פאַרוואַלטונג.…

קסנומקס אפריל קסנומקס

וק אַנטיטראַסט רעגולאַטאָר רייזאַז ביגטעטש שרעק איבער GenAI

די UK CMA האט ארויס אַ ווארענונג וועגן ביג טעק ס נאַטור אין די קינסטלעך סייכל מאַרק. דאָרט…

קסנומקס אפריל קסנומקס

Casa Green: ענערגיע רעוואָלוציע פֿאַר אַ סאַסטיינאַבאַל צוקונפֿט אין איטאליע

די "קאַסע גרין" דעקרעט, פארמולירט דורך די אייראפעישע יוניאַן צו פאַרבעסערן די ענערגיע עפעקטיווקייַט פון בנינים, האט פארענדיקט זיין לעגיסלאַטיווע פּראָצעס מיט ...

קסנומקס אפריל קסנומקס

לייענען כידעש אין דיין שפּראַך

כידעש נוזלעטער
דו זאלסט נישט פאַרפירן די מערסט וויכטיק נייַעס וועגן כידעש. צייכן אַרויף צו באַקומען זיי דורך E- בריוו.

גיי אונדז