በፓይዘን ፕሮግራሚንግ ሰፊው ዓለም ውስጥ በጀማሪዎች ብዙ ጊዜ የማይታወቁ፣ ነገር ግን በቋንቋው ሥነ-ምህዳር ውስጥ ጉልህ ጠቀሜታ ያላቸው የባህሪዎች ስብስብ አለ።
የአስማት ዘዴዎች የቅድመ ዘዴዎች ስብስብ ናቸውdefiልዩ አገባብ ባህሪያትን የሚያቀርቡ በፓይዘን ውስጥ nites። እንደ መጀመሪያ እና መጨረሻ ላይ በድርብ ሰረዞች በቀላሉ ይታወቃሉ __init__, __call__, __len__
… ወዘተ.
የአስማት ዘዴዎች ብጁ ነገሮች አብሮ ከተሰራው የፓይዘን አይነት ጋር ተመሳሳይ ባህሪ እንዲኖራቸው ያስችላቸዋል።
በዚህ ጽሑፍ ውስጥ በኃይለኛው የዱንደር ተግባራት ላይ እናተኩራለን. ዓላማቸውን እንመረምራለን እና ስለ አጠቃቀማቸው እንነጋገራለን.
የ Python ጀማሪም ሆኑ ልምድ ያለው ፕሮግራመር፣ ይህ መጣጥፍ ዓላማው ስለ ዱንደር ተግባራት አጠቃላይ ግንዛቤን ለእርስዎ ለመስጠት ነው፣ ይህም የ Python ኮድ አሰጣጥ ተሞክሮዎን የበለጠ ቀልጣፋ እና አስደሳች ያደርገዋል።
ያስታውሱ የፓይዘን አስማት በቀላል እና ሁለገብነት ብቻ ሳይሆን እንደ ዱንደር ተግባራት ባሉ ኃይለኛ ባህሪያቱ ውስጥም ጭምር ነው።
ምናልባት ከሁሉም የበለጠ መሠረታዊው የዱንደር ተግባር። አዲስ ነገር በፈጠርን ቁጥር (ወይም ስሙ እንደሚያመለክተው) ፓይዘን በራስ ሰር የሚጠራው ይህ የአስማት ዘዴ ነው።__init__
ፒዛ ክፍል
def __init__(ራስ፣መጠን፣መጠን)
self.size = መጠን
ራስን.toppings = toppings
# አሁን ፒያሳ እንፍጠር
my_pizza = ፒዛ ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ']))
ማተም(የእኔ_ፒዛ መጠን) # ይህ ያትማል፡ ትልቅ
print(my_pizza.toppings) # ይህ ያትማል: ['pepperoni', 'moshrooms']
በዚህ ምሳሌ, ፒዛ የሚባል ክፍል ተፈጥሯል. የኛን __init__ ተግባራችንን በመነሻ ጊዜ የምንገለጽ መለኪያዎችን አዘጋጀን እና ለብጁ እቃችን እንደ ባሕሪያት እናዘጋጃቸዋለን።
እዚህ, የክፍሉን ምሳሌ ለመወከል ጥቅም ላይ ይውላል. ስለዚህ ራስን መጠን = መጠን ስንጽፍ፡- “ሄይ፣ ይህ የፒዛ ነገር የባህሪ መጠን አለው” እያልን ነው። size
, እና እቃውን ስፈጥር ያቀረብኩት መጠን እንዲሆን እፈልጋለሁ.
ይህ እንድንችል የሚፈቅድልን የፓይዘን አስማት ዘዴ ነው። defiለብጁ እቃችን መግለጫ nish
አንድ ነገር ሲያትሙ ወይም ተጠቅመው ወደ ሕብረቁምፊ ሲቀይሩት። str()
, Python ካለህ አረጋግጥ defiአንድ ዘዴ ይዤ መጥቻለሁ __str__
ለዚያ ነገር ክፍል.
ከሆነ ነገሩን ወደ ሕብረቁምፊ ለመቀየር ያንን ዘዴ ይጠቀሙ።
ተግባርን ለማካተት የፒዛ ምሳሌያችንን ማራዘም እንችላለን __str__
እንደሚከተለው
ክፍል ፒዛ፡ ዴፍ __init__(እራስ፣መጠን፣ጣፋዎች)፡- ራስን መጠን = መጠን ራስን )}" my_pizza = ፒዛ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ']) ማተም(የእኔ_ፒዛ) # ይህ ያትማል፡ ትልቅ ፒዛ ከፔፐሮኒ፣ እንጉዳዮች ጋር
__repr__
የ__str__ ተግባር የነገሩን ባህሪያት የሚገልጽ መደበኛ ያልሆነ መንገድ ነው። በሌላ በኩል፣ __repr__ ብጁ ነገርን የበለጠ መደበኛ፣ ዝርዝር እና የማያሻማ መግለጫ ለማቅረብ ይጠቅማል።
ከደወሉ repr()
በአንድ ነገር ላይ ወይም የነገሩን ስም ወደ ኮንሶሉ ውስጥ ብቻ ይተይቡ፣ Python ዘዴን ይፈልጋል __repr__
.
Se __str__
አይደለም definite፣ Python ይጠቀማል __repr__
ዕቃውን ለማተም ወይም ወደ ሕብረቁምፊ ለመቀየር በሚሞክርበት ጊዜ እንደ ምትኬ። ስለዚህ ብዙውን ጊዜ ጥሩ ሀሳብ ነው defiቢያንስ ጨርስ __repr__
, ባያደርጉትም defiወጣ __str__
.
እንዴት እንደቻልን እነሆ defiጨርስ __repr__
ለፒዛአችን ምሳሌ፡-
ፒዛ ክፍል
def __init__(ራስ፣መጠን፣መጠን)
self.size = መጠን
ራስን.toppings = toppings
def __repr__(ራስ):
ተመለስ f"ፒዛ('{self.size}'፣ {self.toppings})"
my_pizza = ፒዛ ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ']))
ማተም(repr(የእኔ_ፒዛ)) # ይህ ያትማል፡ ፒዛ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ']))
__repr__
የፒዛውን ነገር እንደገና ለመፍጠር እንደ Python ትእዛዝ ማስኬድ የሚችሉትን ሕብረቁምፊ ይሰጥዎታል ፣ ግን __str__
የበለጠ የሰው መግለጫ ይሰጥዎታል። እነዚህን የዱንደር ዘዴዎች በትንሹ በተሻለ ሁኔታ ለማኘክ እንደሚረዳዎት ተስፋ አደርጋለሁ!
በፓይዘን ውስጥ ኦፕሬተሩን በመጠቀም ቁጥሮችን ማከል እንደሚቻል ሁላችንም እናውቃለን +
, እንደ 3 + 5
.
ግን የአንዳንድ ብጁ ነገር ምሳሌዎችን ማከል ብንፈልግስ?
የዱንደር ተግባር __add__
ይህን ለማድረግ ያስችለናል. አቅም ይሰጠናል። defiየኦፕሬተሩን ባህሪ ያጥፉ +
ለግል የተበጁ እቃዎች ላይ.
በቋሚነት ፍላጎት, እኛ እንደፈለግን እናስብ defiባህሪውን ጨርስ +
በእኛ የፒዛ ምሳሌ ላይ. እንበል ሁለት ወይም ከዚያ በላይ ፒሳዎችን አንድ ላይ ስንጨምር፣ ሁሉንም ጣፋጮቻቸውን በራስ-ሰር ያጣምራል። ምን ሊመስል እንደሚችል እነሆ፡-
ፒዛ ክፍል
def __init__(ራስ፣መጠን፣መጠን)
self.size = መጠን
ራስን.toppings = toppings
def __አክል__(ራስ፣ ሌላ)
ካልሆነ (ሌላ ፒዛ)
TypeError ማሳደግ ("ሌላ ፒዛ ብቻ ነው ማከል የምትችለው!")
new_toppings = ራስን.toppings + ሌላ.toppings
ፒዛን ተመለስ(የራስ መጠን፣ አዲስ_ቶፕስ)
# ሁለት ፒሳዎችን እንፍጠር
ፒዛ1 = ፒዛ ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ']))
pizza2 = ፒዛ ('ትልቅ'፣ ['ወይራ''፣ 'አናናስ']))
# አሁን ደግሞ "እንጨምርላቸው"
ጥምር_ፒዛ = ፒዛ1 + ፒዛ2
print(combined_pizza.toppings) # ይህ ያትማል: ['pepperoni', 'moshrooms', 'olives', 'pineapple']
ከዱንደር ጋር በተመሳሳይ __add__
፣ እኛም እንችላለን defiእንደ ሌሎች የሂሳብ ስራዎችን ያጠናቅቁ __sub__
(ኦፕሬተሩን በመጠቀም በመቀነስ -
) እና __mul__
(ኦፕሬተሩን በመጠቀም ለማባዛት *
).
ይህ የዱንደር ዘዴ ያስችለናል defiተግባሩን ጨርስ len()
ለግል ብጁ ዕቃዎቻችን መመለስ አለብን።
Python ይጠቀማል len()
እንደ ዝርዝር ወይም ሕብረቁምፊ ያለ የውሂብ መዋቅር ርዝመት ወይም መጠን ለማግኘት።
ከምሳሌአችን አንፃር፣ የፒዛ "ርዝመት" በውስጡ ያሉት የጣፋጮች ብዛት ነው ማለት እንችላለን። እንዴት ተግባራዊ ማድረግ እንደምንችል እነሆ፡-
ፒዛ ክፍል
def __init__(ራስ፣መጠን፣መጠን)
self.size = መጠን
ራስን.toppings = toppings
def __len__(ራስ):
የመመለሻ ሌን (self.toppings)
# ፒያሳ እንፍጠር
my_pizza = ፒዛ ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ'፣ 'ወይራ']))
ማተም(ሌን(የእኔ_ፒዛ)) # ይህ ያትማል፡ 3
በ__len__ ዘዴ የዝርዝሩን ርዝመት ብቻ እንመለሳለን። toppings
. አሁን ፣ len(my_pizza)
በላዩ ላይ ምን ያህል ጣራዎች እንዳሉ ይነግረናል my_pizza
.
ይህ የዱንደር ዘዴ ዕቃዎችን ለመንከባከብ ያስችላል, ማለትም በ loop ውስጥ ጥቅም ላይ ሊውል ይችላል.
ይህንን ለማድረግ, እኛ ደግሞ አለብን defiተግባሩን ጨርስ __next__
, ይህ ጥቅም ላይ ይውላል defiበድግግሞሹ ውስጥ የሚቀጥለውን እሴት መመለስ ያለበትን ባህሪ ይንሱ። በተጨማሪም በቅደም ተከተል ውስጥ ምንም ተጨማሪ ንጥረ ነገሮች እንደሌሉ በክስተቱ ላይ የሚደጋገሙትን ምልክት ማሳየት አለበት. በተለምዶ ይህንን የምናሳካው ልዩ ሁኔታን በመጣል ነው። StopIteration
.
ለፒዛአችን ምሳሌ፣ መጠቅለያዎቹን መድገም እንፈልጋለን እንበል። የፒዛ ክፍላችንን ደጋግመን ልናደርገው እንችላለን definendo አንድ ዘዴ __iter__
:
ፒዛ ክፍል
def __init__(ራስ፣መጠን፣መጠን)
self.size = መጠን
ራስን.toppings = toppings
def __iter__(ራስ):
ራስን.n = 0
ራስን መመለስ
def __ቀጣይ__(ራስ):
ራስን ከሆነ።n < len(self.toppings)፡-
ውጤት = ራስን.ቶፕስ [self.n]
ራስን.n += 1
የመመለሻ ውጤት
ሌላ
StopIteration ከፍ ማድረግ
# ፒያሳ እንፍጠር
my_pizza = ፒዛ ('ትልቅ'፣ ['ፔፐሮኒ'፣ 'እንጉዳይ'፣ 'ወይራ']))
# አሁን ደግሞ እንድገመው
በእኔ_ፒዛ ውስጥ ለመሙላት:
ማተም (መጨመሪያ)
በዚህ አጋጣሚ የ loop ጥሪዎች __iter__
ቆጣሪን የሚያስጀምር (self.n)
እና የፒዛውን ነገር እራሱ ይመልሳል (self)
.
ከዚያ የ loop ጥሪዎች __next__
እያንዳንዱን በየተራ ለማግኘት.
ጊዜ __next__
ሁሉንም ቅመማ ቅመሞች ተመልሰዋል ፣ StopIteration
ለየት ያለ ሁኔታን ይፈጥራል እና ለ loop አሁን ምንም ተጨማሪ ነገሮች እንደሌሉ ያውቃል እና የመድገም ሂደቱን ያቋርጣል።
Ercole Palmeri
Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…
የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…
የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…
የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…