Мундариҷа[Пинҳон кардан][Намоиш]
Дар ин лексия мо дар бораи синфҳо, конструкторҳо ва мерос дар python меомӯзем.
Ин мафҳумҳо дар як барномаи калон воқеан муҳиманд, ки дар он намудҳои гуногунро муайян кардан лозим аст.
Синфҳо
Дарсҳо дар барномасозӣ муҳиманд ва онҳо ба python хос нестанд. Бисьёр дигар забонҳои барномасозӣ мафхуми синфхоро дастгирй мекунанд. Мо синфҳоро барои муайян кардани намудҳои нави маълумот истифода мебарем.
То ба ҳол, мо дар бораи намудҳои асосии додаҳо дар Python омӯхтем, ба монанди рақамҳо, сатрҳо ва логикӣ. Инҳо намудҳои асосӣ ё оддии додаҳо дар Python мебошанд. Мо инчунин якчанд намуди маълумоти мураккабро ба монанди рӯйхатҳо ва луғатҳо дидем.
Гарчанде ки ин намудҳо бениҳоят муфиданд, онҳо наметавонанд ҳамеша барои моделсозии мафҳумҳои мураккаб истифода шаванд. Масалан, дар бораи идеяи нуқта ё аробаи харид фикр кунед. Аробаи харид мантиқӣ ё рӯйхат нест. Ин як намуди дигар маълумот аст. Ҳамин тавр, мо метавонем синфҳоро барои муайян кардани намудҳои нав барои моделсозии консепсияҳои воқеӣ истифода барем.
Акнун биёед як навъи нави маълумотро бо номи нуқта муайян кунем. Ин навъи нав дорои усулҳое хоҳад буд, ки мо қаблан санҷида будем.
Ин аст, ки шумо ин корро мекунед:
Мо аз муайян кардани синф бо истифода аз калимаи калидии "класс" оғоз мекунем ва дарҳол пас аз он мо ба синфи худ ном медиҳем.
class Point
Акнун, ба конвенсияи номгузорӣ нигаред, ки ман дар ин ҷо истифода кардам. Ман дар ин ҷо ҳарфи аввалро калон ҳарф задам, ин аст он чизе ки мо конвенсияи номгузории Паскал меномем. Ин конвенсия аз конвенсияе, ки мо барои номгузории тағирёбандаҳо ва функсияҳои худ истифода мебарем, фарқ мекунад, ки мо ҳамеша ҳарфҳои хурдро истифода мебарем ва калимаҳои сершуморро бо истифода аз зерхатра ҷудо мекунем. Аммо ҳангоми номгузории синфҳо мо барои ҷудо кардани калимаҳои сершумор ба ҷои хатти зерхатро истифода намебарем, мо ҳарфи аввали ҳар як калимаро калон мекунем.
Пас аз муайян кардани синфи мо, ду нуқта истифода мешавад, ки ин маънои онро дорад, ки ҳоло блок муайян карда шудааст.
class Point:
def move (self):
Дар ин блок мо метавонем ҳамаи функсияҳо ё усулҳоеро, ки ба нуқтаҳо тааллуқ доранд, муайян кунем. Масалан, мо метавонем функсияеро бо номи "ҳаракат" барои ҳаракат додани нуқта муайян кунем. Дар хотир доред, ки вақте ки мо қавси кушодро ворид мекунем, PyCharm ба таври худкор дар ин ҷо "худ" -ро илова мекунад. Ин як калимаи махсус аст ва ба ман иҷозат диҳед, ки ба зудӣ ба ин баргардам. Биёед "ҳаракат" -ро дар терминал чоп кунем.
print("move")
Биёед усули дигареро ба мисли "расм кардан" муайян кунем ва онро дар терминал чоп кунем.
def draw(self):
print("draw")
Мо бо таърифи синфи "нуқта"-и худ анҷом ёфтем. Бо ин навъи нав, мо метавонем объектҳои нав эҷод кунем. Синф танҳо нақша ё қолабро барои эҷоди объектҳое муайян мекунад, ки намунаҳои воқеии дар асоси ин нақша мебошанд. Барои сохтани объект, мо номи синфи худро нависед ва сипас онро мисли функсия даъват мекунем. Ин объекти нав эҷод мекунад ва сипас онро бармегардонад. Пас мо метавонем он объектро дар тағирёбанда нигоҳ дорем. Биёед ман ба шумо нишон диҳам:
Дар ин ҷо мо "нуқтаи1" -ро муайян кардем, ки нуқтаи сеченака аст. Шумо мебинед, ки мо метавонем координатҳои алоҳидаро дар терминал чоп кунем.
Бо ин нуқта мо метавонем ду усули “кашӣ” ва “ҳаракат”-ро истифода барем.
Ҳамин тавр, барои хулоса кардан, мо синфҳоро барои муайян кардани намудҳои нав истифода мебарем ва ин намудҳо метавонанд усулҳое дошта бошанд, ки мо дар бадани синф муайян мекунем. Синфҳо метавонанд атрибутҳое дошта бошанд, ки мо метавонем онҳоро дар ҳама ҷо дар барномаҳои худ муқаррар кунем.
Конструкторон
То ҳол мо бо истифода аз синфҳо чӣ гуна сохтани навъҳои навро омӯхтем. Ҳоло дар ин татбиқ як мушкили хурде вуҷуд дорад. Мо метавонем объекти нуқтаеро бидуни координати x ё y бо истифода аз синфҳо созем ва ин идеалӣ нест. Биёед ман ба шумо нишон диҳам.
Биёед пеш аз гузоштани координата x нуқтаеро эҷод кунем ва онро чоп кунем. Иҷрои барномаи мо боиси хатои атрибутӣ ба монанди ин мегардад:
Ин маънои онро дорад, ки объекти нуқта ягон атрибут надорад бо номи x. Акнун масъала дар он аст, ки объекти нуқта бидуни координатҳои x ё y имконпазир аст. Ин маъно надорад, зеро ҳар вақте ки мо дар бораи ягон нуқта сӯҳбат мекунем, мо бояд бидонем, ки он нуқта дар куҷо ҷойгир аст. Барои ҳалли ин мушкилот мо конструкторро истифода мебарем. Конструктор функсияест, ки ҳангоми сохтани объект даъват карда мешавад.
Ин аст, ки чӣ тавр мо конструкторро истифода мебарем. Аввалан, биёед арзишҳои координатҳои x ва y-ро дар барномаи дар боло овардашуда гузаронем.
point = Point(10, 20)
print(point.x)
Ҳоло, мо бояд ба ин синф усули махсусеро илова кунем, ки конструктор ном дорад. Синтаксиси он чунин аст:
def __init__(self, x, y):
init
барои оғозёбӣ кӯтоҳ аст ва ин функсия ё усулест, ки ҳангоми сохтани объекти нуқтаи нав даъват карда мешавад. Дарҳол пас аз x ва y илова карда мешаванд self
барои илова кардани ду параметри иловагӣ.
Пас аз он, мо бояд x ва y -ро ба арзишҳои додашуда, яъне 10 ва 20 харита кунем
self.x = x
self.y = y
Мо аз self
барои истинод ба объекти ҷорӣ ва он гоҳ мо атрибути x-ро ба аргументи x, ки ба функсияи "x" дода шудааст, муқаррар мекунем. Бо ин рох, истифода init
усул, мо метавонем объектҳои худро оғоз кунем. Ин усул конструктор номида мешавад. Биёед барномаи худро иҷро кунем.
Акнун, мо метавонем дертар координатҳои x ва y -ро тағир диҳем. Биёед координата x-ро нав кунем:
point = Point(10, 20)
point.x = 11
print(point.x)
Акнун, координата x ба арзиши 11 нав карда мешавад.
варзиш
Дар ин ҷо як машқи ҷолиб барои шумост.
Ман мехоҳам, ки шумо як навъи наверо, ки шахс ном дорад, муайян кунед. Ин объектҳои "Шахс" бояд дорои "name
"хусусият ва инчунин "talk()
”Усули.
Ин як кори оддӣ аст ва набояд аз якчанд дақиқа зиёд бошад.
ҳал
Бо муайян кардани синфи "Шахс" ба таври зерин оғоз кунед:
class Person:
self.name = name
Мо конструкторро дертар муайян мекунем. Акнун, мо метавонем объекти "Шахс" -ро созем. Биёед онро Ҷон бигӯем
john = Person("John Smith")
print(john.name)
john.talk()
Акнун, ба қисми якуми код гузаред ва созанда эҷод кунед.
def __init__(self, name):
Рамзи ниҳоӣ чунин хоҳад буд:
Шумо инчунин метавонед сатрҳои форматшуда ва дигар мафҳумҳоро дар якҷоягӣ бо синфҳо ва конструкторҳо истифода баред.
Мерос
Мерос мафҳуми дигаре аст, ки бо синфҳо алоқаманд аст, ки ба шумо имкон медиҳад кодро дубора истифода баред.
Ин порчаи кодро баррасӣ кунед.
class Dog:
def walk(self):
print("walk")
Мо синфи «Саг»-ро бо усули «сайр» ташкил кардем. Дар ин усул, мо танҳо паёми роҳро дар терминал чоп мекунем. Фарз мекунем, ки дар як барномаи воқеӣ, дар ин ҷо ба ҷои як сатр 10 сатри код мавҷуд аст. Дар оянда, агар синфи дигар барои доштани усули "гаштан" лозим бошад, мо бояд ҳамаи ин рамзро такрор кунем. Ин идеал нест.
Дар барномасозӣ, мо як принсипе дорем, ки DRY ном дорад, ки барои такрор нашавед. Биёед бигӯем, ки дар оянда мо бо усули "гаштан"-и худ мушкилот пайдо мекунем ва агар мо ин усулро дар бисёр ҷойҳои дигар такрор ё такрор карда бошем, мо бояд баргардем ва ин мушкилотро дар ҳар ҷое, ки онро такрор кардаем, ислоҳ кунем. код. Аз ин рӯ, дар барномасозӣ мо набояд чизеро ду маротиба муайян кунем.
Барои рафъи ин мушкилот равишҳои гуногун вуҷуд доранд, аммо дар ин ҷо мо равишеро меомӯзем, ки барои шурӯъкунандагон осонтар аст ва он мерос номида мешавад. Дар ин ҳолат, мо синфи дигари "ширхӯранда"-ро эҷод мекунем ва атрибути "гаштан"-и худро дар он синф муайян мекунем.
class Mammal:
def walk(self):
print("walk")
Пас аз муайян кардани синфи "ширхӯрдаҳо" мо метавонем меросро барои интиқол додани атрибутҳо истифода барем:
Ҳам синфҳои саг ва ҳам гурбаҳо тамоми усулҳои синферо, ки дар синфи волидайни худ муайян шудаанд, мерос мегиранд. Ҳоло, мо метавонем усулҳои махсуси сагҳоро илова кунем:
class Dog:
def bark(self):
print("bark")
Ба натиҷа расидан!
Ин ҳама дар бораи синфҳо, конструкторҳо ва истифодаи дубораи код дар синфҳо бо консепсияҳои мерос буд. Ҳоло мо дар арафаи анҷоми силсилаамон қарор дорем. Дар ин лаҳза, шумо бояд дар Python кодҳои хуб, хондашаванда ва мухтасар тавлид кунед.
Мо консепсияи модулҳо ва бастаҳоро дар лексияи оянда хоҳем дид.
Дин ва мазҳаб