Мазмуну[Жашыруу][Көрсөтүү]
Бул лекцияда биз питондогу класстар, конструкторлор жана мурастоо жөнүндө билебиз.
Бул түшүнүктөр ар кандай түрлөрүн аныктоо керек болгон чоң программада чындап маанилүү.
класстар
Класстар программалоодо маанилүү жана алар python үчүн өзгөчө эмес. Башка көптөгөн программалоо тилдери класстар жөнүндөгү түшүнүктү колдойт. Биз жаңы маалымат түрлөрүн аныктоо үчүн класстарды колдонобуз.
Буга чейин биз Pythonдогу сандар, саптар жана логикалык маалыматтар сыяктуу негизги маалымат түрлөрү жөнүндө билдик. Бул Pythonдогу негизги же жөнөкөй маалымат түрлөрү. Биз ошондой эле тизмелер жана сөздүктөр сыяктуу бир нече татаал маалыматтарды көрдүк.
Бул түрлөрү абдан пайдалуу болгону менен, алар ар дайым татаал түшүнүктөрдү моделдөө үчүн колдонулушу мүмкүн эмес. Мисалы, бир чекит, же соода араба идеясы жөнүндө ойлонуп көрөлү. Соода арабасы буль же тизме эмес. Бул башка маалымат. Ошентип, биз класстарды реалдуу түшүнүктөрдү моделдөө үчүн жаңы типтерди аныктоо үчүн колдоно алабыз.
Эми, келгиле, чекит деп аталган жаңы маалымат түрүн аныктайлы. Бул жаңы типте биз мурда текшерген ыкмалар болот.
Сиз муну ушундай кыласыз:
Биз классты "класс" ачкыч сөзү менен аныктоодон баштайбыз жана андан кийин дароо классыбызга ат беребиз.
class Point
Эми мен бул жерде колдонгон ат коюу конвенциясын караңыз. Мен бул жерде биринчи тамганы баш тамга менен жаздым, муну биз Паскаль атоо конвенциясы деп атайбыз. Бул конвенция биз өзгөрмөлөрүбүздү жана функцияларыбызды атоо үчүн колдонгон конвенциядан айырмаланып турат, алар үчүн биз ар дайым кичине тамгаларды колдонуп, бир нече сөздөрдү астын сызык менен бөлөбүз. Бирок класстарды атоодо бир нече сөздү бөлүү үчүн астын сызыкты колдонбойбуз, ар бир сөздүн биринчи тамгасын баш тамга менен жазабыз.
Биздин классты аныктагандан кийин кош чекит колдонулат, бул азыр блок аныкталганын билдирет.
class Point:
def move (self):
Бул блокто биз чекиттерге тиешелүү бардык функцияларды же ыкмаларды аныктай алабыз. Мисалы, биз чекитти жылдыруу үчүн "жылуу" деп аталган функцияны аныктай алабыз. Ачык кашааны терерибиз менен, PyCharm бул жерге автоматтык түрдө "өзүн" кошот. Бул өзгөчө ачкыч сөз жана мага бир аздан кийин бул нерсеге кайрылалы. Келгиле, терминалга "жылуу" басып чыгаралы.
print("move")
Келгиле, "чыруу" сыяктуу дагы бир ыкманы аныктап, аны терминалга басып чыгаралы.
def draw(self):
print("draw")
Биз "пункт" классыбызды аныктап бүттүк. Бул жаңы түрү менен биз жаңы объекттерди түзө алабыз. Класс жөн гана планды же ошол схеманын негизинде иш жүзүндөгү инстанцияларды түзүү үчүн шаблонду аныктайт. Объектти түзүү үчүн классыбыздын атын жазып, анан аны функция сыяктуу чакырабыз. Бул жаңы объектти түзүп, андан кийин аны кайтарат. Андан кийин биз ал объектти өзгөрмөдө сактай алабыз. Мен сага көрсөтөм:
Бул жерде биз үч өлчөмдүү чекит болгон “1 чекитти” аныктадык. Сиз көрө аласыз, биз терминалга жеке координаттарды басып чыгара алабыз.
Бул чекит менен биз эки ыкманы колдонсок болот "чыруу" жана "кыймыл".
Ошентип, биз жаңы типтерди аныктоо үчүн класстарды колдонобуз жана бул типтерде биз класстын денесинде аныктаган методдор болушу мүмкүн. Класстарда биздин программаларыбыздын каалаган жеринде орното турган атрибуттар болушу мүмкүн.
Конструкторлор
Азырынча класстарды колдонуу менен жаңы типтерди түзүүнү үйрөндүк. Эми бул ишке ашырууда кичинекей көйгөй бар. Биз класстарды колдонуп x же у координаты жок чекит объектисин түзө алабыз жана бул идеалдуу эмес. Мен сага көрсөтөм.
x координатын орнотуудан мурун чекит түзүп, аны басып чыгаралы. Биздин программаны иштетүү төмөнкүдөй атрибут катасына алып келет:
Бул чекит объектинин х деген атрибуту жок экенин билдирет. Эми маселе, х же у координаттары жок чекиттик объектке ээ болушу мүмкүн. Бул эч кандай мааниге ээ эмес, анткени биз кайсы бир чекит жөнүндө сүйлөшкөндө, ал чекит кайда жайгашканын билишибиз керек. Бул маселени чечүү үчүн биз конструкторду колдонобуз. Конструктор - бул объектти түзүү учурунда чакырылган функция.
Бул жерде биз конструкторду кантип колдонобуз. Биринчиден, жогорудагы программадагы х жана у координаттарынын маанилерин өткөрүп алалы.
point = Point(10, 20)
print(point.x)
Эми бул класска конструктор деп аталган атайын ыкманы кошушубуз керек. Анын синтаксиси мындай:
def __init__(self, x, y):
init
инициализация үчүн кыска жана бул жаңы чекит объекти түзүлгөндө чакырыла турган функция же ыкма. х жана у дароо кийин кошулат self
эки кошумча параметрди кошуу.
Андан кийин, биз x жана y көрсөткүчтөрүн берилген маанилерге, башкача айтканда, 10 жана 20га салыштырышыбыз керек
self.x = x
self.y = y
Биз колдонгон self
учурдагы объектке кайрылуу үчүн, андан кийин "x" функциясына берилген х аргументине x атрибутун коебуз. Бул жол менен, колдонуу init
ыкмасы, биз объекттерибизди инициализациялай алабыз. Бул ыкма конструктор деп аталат. Келгиле, программабызды иштетели.
Эми биз x жана у координаттарын кийинчерээк өзгөртө алабыз. 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до жакшы, окула турган жана кыска коддорду чыгара билишиңиз керек.
Модулдар жана пакеттер түшүнүгүн кийинки лекцияда көрөбүз.
Таштап Жооп