Змест[Схаваць][Паказаць]
У гэтай лекцыі мы даведаемся пра класы, канструктары і спадчыну ў Python.
Гэтыя паняцці вельмі важныя ў вялікай праграме, дзе неабходна вызначыць розныя тыпы.
Класы
Класы важныя ў праграмаванні, і яны не спецыфічныя для python. Многія іншыя мовы праграмавання падтрымліваць паняцце класаў. Мы выкарыстоўваем класы для вызначэння новых тыпаў даных.
Да гэтага часу мы даведаліся пра асноўныя тыпы даных у Python, такія як лічбы, радкі і лагічныя значэнні. Гэта асноўныя або простыя тыпы дадзеных у Python. Мы таксама бачылі пару складаных тыпаў даных, такіх як спісы і слоўнікі.
Хоць гэтыя тыпы надзвычай карысныя, іх не заўсёды можна выкарыстоўваць для мадэлявання складаных канцэпцый. Напрыклад, падумайце пра ідэю кропкі або кошыка. Кошык - гэта не лагічнае значэнне або спіс. Гэта розныя даныя. Такім чынам, мы можам выкарыстоўваць класы для вызначэння новых тыпаў для мадэлявання рэальных паняццяў.
Зараз давайце вызначым новы тып даных пад назвай point. Гэты новы тып будзе мець метады, як мы правяралі раней.
Вось як вы гэта зробіце:
Мы пачынаем з вызначэння класа з дапамогай ключавога слова «клас» і адразу пасля гэтага мы даем нашаму класу назву.
class Point
Цяпер паглядзіце на пагадненне аб найменнях, якое я выкарыстаў тут. Я напісаў першую літару з вялікай літары, гэта тое, што мы называем пагадненнем аб найменні паскаля. Гэта пагадненне адрозніваецца ад таго, якое мы выкарыстоўваем для наймення нашых зменных і функцый, для якіх мы заўсёды выкарыстоўваем малыя літары і падзяляем некалькі слоў знакам падкрэслівання. Але пры назве класаў мы не выкарыстоўваем сімвал падкрэслівання для падзелу некалькіх слоў, мы пішам першую літару кожнага слова з вялікай літары.
Пасля вызначэння нашага класа выкарыстоўваецца двукроп'е, што азначае, што блок вызначаны.
class Point:
def move (self):
У гэтым блоку мы можам вызначыць усе функцыі або метады, якія належаць кропкам. Напрыклад, мы можам вызначыць функцыю пад назвай «перасоўванне» для перамяшчэння кропкі. Звярніце ўвагу, што як толькі мы набіраем адкрытыя дужкі, PyCharm аўтаматычна дадае сюды «я». Гэта спецыяльнае ключавое слова, і дазвольце мне вярнуцца да гэтага ў бліжэйшы час. Давайце надрукуем «move» на тэрмінале.
print("move")
Давайце вызначым іншы метад, напрыклад «маляваць», і надрукуем яго на тэрмінале.
def draw(self):
print("draw")
Мы скончылі з вызначэннем нашага «кропкавага» класа. З дапамогай гэтага новага тыпу мы можам ствараць новыя аб'екты. Клас проста вызначае план або шаблон для стварэння аб'ектаў, якія з'яўляюцца фактычнымі асобнікамі на аснове гэтага плана. Каб стварыць аб'ект, мы набіраем імя нашага класа, а затым выклікаем яго гэтак жа, як функцыю. Гэта стварае новы аб'ект, а затым вяртае яго. Затым мы можам захаваць гэты аб'ект у зменнай. Дазвольце мне паказаць вам:
Тут мы вызначылі «кропку1», якая з'яўляецца трохмернай кропкай. Вы бачыце, што мы можам надрукаваць асобныя каардынаты на тэрмінале.
Мы можам выкарыстоўваць два метады «маляваць» і «перамяшчаць» з гэтай кропкай.
Такім чынам, рэзюмуючы, мы выкарыстоўваем класы для вызначэння новых тыпаў, і гэтыя тыпы могуць мець метады, якія мы вызначаем у целе класа. Класы могуць мець атрыбуты, якія мы можам усталяваць дзе заўгодна ў нашых праграмах.
Канструктары
Да гэтага часу мы навучыліся ствараць новыя тыпы з дапамогай класаў. Цяпер ёсць невялікая праблема з гэтай рэалізацыяй. Мы можам стварыць кропкавы аб'ект без каардынаты x або y з дапамогай класаў, і гэта не ідэальна. Дазвольце мне паказаць вам.
Давайце створым кропку і надрукуем яе, перш чым задаць каардынату х. Запуск нашай праграмы прыводзіць да памылкі атрыбута, падобнай да гэтай:
Гэта азначае, што кропкавы аб'ект не мае атрыбута пад назвай 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 пазней. Давайце абновім каардынаты х:
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.
Мы ўбачым канцэпцыю модуляў і пакетаў у наступнай лекцыі.
Пакінуць каментар