Table of Contents[Kache][Montre]
Nan konferans sa a, nou pral aprann sou klas, konstrukteur ak eritaj nan python.
Konsèp sa yo vrèman enpòtan nan yon gwo pwogram kote diferan kalite yo bezwen pou defini.
Klas
Klas yo esansyèl nan pwogramasyon epi yo pa espesifik nan python. Anpil lòt langaj pwogramasyon sipòte nosyon klas yo. Nou itilize klas pou defini nouvo kalite done.
Jiskaprezan, nou te aprann sou kalite done debaz yo nan Python tankou nimewo, fisèl, ak boolean. Sa yo se kalite done debaz oswa senp nan Python. Nou te wè tou yon koup nan kalite done konplèks tankou lis ak diksyonè.
Pandan ke kalite sa yo trè itil, yo pa ka toujou itilize yo modèl konsèp konplèks. Pou egzanp, panse sou lide a nan yon pwen, oswa yon charyo. Yon shopping cart se pa yon boolean oswa yon lis. Se yon lòt kalite done. Se konsa, nou ka itilize klas yo defini nouvo kalite modèl konsèp reyèl.
Koulye a, an n defini yon nouvo tip done yo rele pwen. Nouvo kalite sa a pral gen metòd jan nou tcheke anvan.
Men ki jan ou pral fè li:
Nou kòmanse pa defini yon klas lè nou itilize mo kle "klas la" epi imedyatman apre sa nou bay klas nou an yon non.
class Point
Koulye a, gade nan konvansyon nonmen mwen te itilize isit la. Mwen te kapitalize premye lèt la isit la, sa a se sa nou rele yon konvansyon nonmen pascal. Konvansyon sa a diferan de sa nou itilize pou nonmen varyab ak fonksyon nou yo pou nou toujou sèvi ak lèt miniskil epi separe plizyè mo lè l sèvi avèk yon souliye. Men, lè nou bay non klas yo, nou pa sèvi ak yon souliye pou separe plizyè mo pito, nou mete majiskil premye lèt chak mo.
Apre nou fin defini klas nou an, yo itilize yon kolon ki vle di kounye a yon blòk defini.
class Point:
def move (self):
Nan blòk sa a, nou ka defini tout fonksyon oswa metòd ki fè pati pwen yo. Pou egzanp, nou ka defini yon fonksyon ki rele "deplase" pou deplase yon pwen. Remake byen ke le pli vit ke nou tape parantèz louvri, PyCharm otomatikman ajoute "pwòp tèt ou" isit la. Sa a se yon mo kle espesyal epi kite m 'tounen sou sa a yon ti tan. Ann enprime "deplase" sou tèminal la.
print("move")
Ann defini yon lòt metòd tankou "desine" epi enprime li sou tèminal la.
def draw(self):
print("draw")
Nou fini ak definisyon klas "pwen" nou an. Avèk nouvo kalite sa a, nou ka kreye nouvo objè. Yon klas tou senpleman defini plan an oswa modèl pou kreye objè ki se egzanp aktyèl yo ki baze sou plan sa a. Pou kreye yon objè, nou tape non klas nou an epi rele li jis tankou yon fonksyon. Sa a kreye yon nouvo objè epi retounen li. Lè sa a, nou ka estoke objè sa a nan yon varyab. Kite m montre w:
Isit la nou te defini yon "point1" ki se yon pwen ki genyen twa dimansyon. Ou ka wè sa, nou ka enprime kowòdone endividyèl sou tèminal la.
Nou ka itilize de metòd "desine" ak "deplase" ak pwen sa a.
Se konsa, rezime, nou itilize klas yo defini nouvo kalite ak kalite sa yo ka gen metòd ke nou defini nan kò a nan klas la. Klas yo ka gen atribi ke nou ka mete nenpòt kote nan pwogram nou yo.
Konstriktè
Jiskaprezan, nou te aprann kijan pou kreye nouvo kalite lè l sèvi avèk klas yo. Koulye a, gen yon ti pwoblèm ak aplikasyon sa a. Nou ka kreye yon objè pwen san yon kowòdone x oswa y lè l sèvi avèk klas epi sa pa ideyal. Kite m montre w.
Ann kreye yon pwen epi enprime li anvan nou mete kowòdone x la. Kouri pwogram nou an rezilta nan yon erè atribi tankou sa a:
Sa vle di ke objè a pwen pa gen okenn atribi ki rele x. Kounye a pwoblèm nan se ke li posib pou gen yon objè pwen san kowòdone x oswa y. Sa a pa fè sans kòm chak fwa nou pale sou yon pwen, nou bezwen konnen ki kote pwen sa a sitiye. Pou rezoud pwoblèm sa a, nou itilize yon konstrukteur. Yon konstrukteur se yon fonksyon ki vin rele nan moman an nan kreye yon objè.
Men ki jan nou itilize yon konstrukteur. Premyèman, ann pase valè kowòdone x ak y nan pwogram ki anwo a.
point = Point(10, 20)
print(point.x)
Koulye a, nou bezwen ajoute yon metòd espesyal nan klas sa a ki rele yon konstrukteur. Sentaks li se tankou sa a:
def __init__(self, x, y):
init
se kout pou inisyalize, epi sa a se fonksyon an oswa metòd ki vin rele lè yo kreye yon nouvo objè pwen. Yo ajoute x ak y imedyatman apre self
ajoute de paramèt siplemantè.
Apre sa, nou ta dwe kat x ak y nan valè yo pase sa vle di 10 ak 20
self.x = x
self.y = y
Nou itilize nan self
pou refere a objè aktyèl la ak Lè sa a, nou mete atribi x la nan agiman x la pase nan fonksyon "x". Nan fason sa a, lè l sèvi avèk init
metòd, nou ka inisyalize objè nou yo. Metòd sa a refere yo kòm yon konstrukteur. Ann kouri pwogram nou an.
Koulye a, nou ka chanje kowòdone x ak y pita. Ann mete ajou kowòdone x:
point = Point(10, 20)
point.x = 11
print(point.x)
Koulye a, kowòdone x la mete ajou ak valè 11.
Fè egzèsis
Men yon egzèsis enteresan pou ou.
Mwen vle ou defini yon nouvo kalite ki rele yon moun. Objè "Moun" sa yo ta dwe gen yon "name
" atribi osi byen ke yon "talk()
”Metòd.
Li se yon travay ki senp epi li pa ta dwe pran plis pase yon koup de minit.
Solisyon
Kòmanse ak defini klas "Moun" tankou sa a:
class Person:
self.name = name
Nou pral defini konstrukteur la pita. Koulye a, nou ka kreye objè "Moun". Ann rele li Jan
john = Person("John Smith")
print(john.name)
john.talk()
Koulye a, ale nan premye pòsyon nan kòd la epi kreye yon konstrukteur.
def __init__(self, name):
Kòd final la pral sanble sa a:
Ou kapab tou itilize fisèl fòma ak lòt konsèp ansanm ak klas ak konstrukteur.
Pòsyon tè
Eritaj se yon lòt konsèp ki asosye ak klas ki pèmèt ou reitilize yon kòd.
Konsidere moso kòd sa a.
class Dog:
def walk(self):
print("walk")
Nou te kreye yon klas "Chen" ak yon metòd "mache". Nan metòd sa a, nou ap tou senpleman enprime mesaj la mache sou tèminal la. Ann di, nan yon pwogram reyèl, gen 10 liy nan kòd olye pou yo jis yon liy isit la. Nan lavni, si yon lòt klas bezwen gen metòd "mache", nou pral oblije repete tout kòd sa a. Sa a se pa ideyal.
Nan pwogramasyon, nou gen yon prensip ki rele DRY ki kout pou pa repete tèt ou. Ann di yon lè nan tan kap vini an, nou dekouvri yon pwoblèm ak metòd "mache" nou an epi si nou te repete oswa kopi metòd sa a nan anpil lòt kote, nou pral oblije retounen ak ranje pwoblèm sa a nan chak kote nou te kopi sa a. kòd. Se poutèt sa nan pwogramasyon nou pa ta dwe defini yon bagay de fwa.
Gen diferan apwòch pou remèd pwoblèm sa a men isit la nou pral aprann youn nan ki pi fasil pou débutan epi li rele eritaj. Nan ka sa a, nou pral kreye yon lòt klas "mamifè" epi defini atribi "mache" nou an nan klas sa a.
class Mammal:
def walk(self):
print("walk")
Apre nou fin defini klas "Mamifè" nou an, nou ka itilize eritaj pou pase atribi yo tankou sa a:
Tou de klas chen ak chat yo eritye tout metòd klas yo defini nan klas paran yo. Koulye a, nou ka ajoute metòd espesifik pou chen tankou sa a:
class Dog:
def bark(self):
print("bark")
Wrap Up!
Sa a te tout sou klas yo, konstrukteur ak reitilize kòd la nan klas ak konsèp eritaj. Koulye a, nou prèske nan fen seri nou an. Nan pwen sa a, ou ta dwe kapab pwodwi bon, lizib ak kout kòd nan Python.
Nou pral wè konsèp modil ak pakè nan pwochen konferans la.
Kite yon Reply