Питхон

Полиморфизам у Питхону

Полиморфизам у Питхону
Полиморфизам значи „много облика.”Полиморфизам је важна карактеристика објектно оријентисаног програмирања (ООП).  Када се иста метода декларише више пута, у више сврха и у различитим класама, онда се то назива полиморфизам. Још једна карактеристика ООП-а је наследство, преко којих се може створити подређена класа наслеђивањем особина родитељске класе. Понекад захтева да програмер декларише истоимени метод у родитељској и подређеној класи за различите сврхе. Ова врста задатка такође се може применити применом полиморфизма. Овај чланак објашњава како се полиморфизам може дефинисати у објектно оријентисаном програмирању (ООП).

Пример 1: Полиморфизам са функцијама и објектима

Следећа скрипта приказује употребу полиморфизма између две различите класе. Функција се користи за стварање објекта тих класа. Вредност именоване променљиве боја је иницијализован у __у томе__() метода оба 'Папагај'и'Ној'класе у време стварања предмета. Тхе Карактеристике() метода је дефинисана у обе класе, али је излаз методе за сваку класу мало другачији. Тхе Цреате_Објецт () функција се користи за стварање објекта класе. Ова функција се извршава два пута за креирање објекта у 'Папагај'у класи и у'Ној' класа. Свака ће позвати методу феатурес () обе класе и исписати излаз.

#!/ уср / бин / енв питхон3
# Дефинишите класу Паррот
класа Папагај ():
деф __инит __ (селф, боја):
себе.боја = боја
деф карактеристике (само):
принт ("Боја папагаја је% с"% само.боја)
принт ("Папагај може да лети")
# Дефинишите класу нојева
класа Ној ():
деф __инит __ (селф, боја):
себе.боја = боја
деф карактеристике (само):
принт ("Боја ноја је% с"% само.боја)
принт ("Ној не може да лети")
# Дефинишите функцију за позивање методе класе
деф Цреате_Објецт (Објецт):
Предмет.Карактеристике()
# Направите објекат класе Паррот
Цреате_Објецт (Паррот ('Греен'))
# Направите објекат класе Ној
Цреате_Објецт (Ној ('Црно и бело'))

Оутпут

Следећи излаз показује да је објекат 'Папагај'класа је креирана са'Зелена'као боја вредност. Функција исписује излаз позивањем знака Карактеристике() метода 'Папагај' класа. Даље, предмет „Ној'класа је креирана са'Црно и бело'као боја вредност. Функција исписује излаз позивањем знака Карактеристике() метода 'Ној' класа.

Пример 2: Полиморфизам у неповезаним методама класе

Као и у претходном примеру, следећа скрипта приказује употребу полиморфизма у две различите класе, али ниједна прилагођена функција се не користи за декларисање објекта. Тхе __у томе__() метода оба 'Менаџер' и 'Службеник'класе ће иницијализовати потребне променљиве. Полиморфизам се овде примењује стварањем пост_детаилс () и плата() методе унутар обе класе. Садржај ових метода је различит за сваку од ових класа. Даље, променљиве објекта се креирају за обе класе и понављају се помоћу а за петља. У свакој итерацији, пост_детаилс () и плата() позивају се методе за испис резултата.

#!/ уср / бин / енв питхон3
# Дефинишите класу под називом Манагер
цласс Манагер:
деф __инит __ (ја, име, одељење):
себе.име = име
себе.пост = 'Менаџер'
себе.одељење = одељење
# Дефинишите функцију за подешавање детаља
деф пост_детаилс (селф):
ако ја.одељење.горња () == 'ХР':
себе.основно = 30000
иначе:
себе.основно = 25000
себе.најам куће = 10000
себе.превоз = 5000
принт ("Пост% с је% с"% (селф.име, ја.пошта))
# Дефинишите функцију за израчунавање зараде
деф плата (сама):
плата = само.основно + ја.хоусеРент + селф.транспорт
повратна плата
# Дефинишите класу која се зове Службеник
разред Службеник:
деф __инит __ (ја, име):
себе.име = име
себе.пост = 'Службеник'
# Дефинишите функцију за подешавање детаља
деф пост_детаилс (селф):
себе.основно = 10000
себе.превоз = 2000
принт ("Пост% с је% с"% (селф.име, ја.пошта))
# Дефинишите функцију за израчунавање зараде
деф плата (сама):
плата = само.основно + ја.транспорт
повратна плата
# Креирајте објекте за часове
манагер = Манагер ("Кабир", "хр")
службеник = службеник ("Робин")
# Позовите исте функције из различитих класа
за обј ин (менаџер, службеник):
обј.пост_детаилс ()
принт („Плата је“, обј.плата())

Оутпут

Следећи излаз показује да је објекат 'Јасле'класа се користи у првој итерацији за петље и зарада менаџера се штампа након обрачуна. ПредметСлужбениккласа се користи у другој итерацији за петље и зарада службеника се штампа након обрачуна.

Пример 3: Полиморфизам у сродним методама класе

Следећа скрипта приказује употребу полиморфизма између две класе детета. Ево, оба 'Троугао' и 'Круг'су подређене класе родитељске класе'Геометриц_Схапе.'Према наследству, класа дете може да приступи свим променљивим и методама родитељске класе. Тхе __у томе__() метода 'Геометриц_Схапе'класа се користи у обе подређене класе за иницијализацију променљиве име коришћењем супер () метода. Вредности база и висина од 'Троугаокласа ће бити иницијализована у време креирања објекта. На исти начин, вредности радијуса 'Кругкласа ће бити иницијализована у време креирања објекта. Формула за израчунавање површине троугла је ½ × база × висина, која се спроводи у област () метода 'Троугао' класа. Формула за израчунавање површине круга је 3.14 × (радијус)2, која се спроводи у област () метода 'Круг' класа. Имена обе методе су овде иста, али је сврха другачија. Затим ће се кориснику узети вредност низа за стварање објекта и за позивање методе засноване на вредности. Ако корисник упише „троугао“, онда је објекат „Триангле ' класа ће бити створена, а ако корисник укуца 'круг', онда ће се објект 'Круг' класа ће бити створена. Ако корисник упише било који текст без „троугла“ или „круга“, тада се неће створити ниједан објекат и исписат ће се порука о грешци.

#!/ уср / бин / енв питхон3
# Дефинишите родитељску класу
класа Геометриц_Схапе:
деф __инит __ (ја, име):
себе.име = име
# Дефинишите подређену класу за израчунавање површине троугла
цласс Триангле (Геометриц_Схапе):
деф __инит __ (селф, име, основа, висина):
супер ().__инит __ (име)
себе.база = основа
себе.висина = висина
деф подручје (само):
резултат = 0.5 * селф.база * само.висина
принт ("\ нПовршина% с =% 5.2ф "% (само.име, резултат))
# Дефинишите подређену класу за израчунавање површине круга
класа Круг (Геометриц_Схапе):
деф __инит __ (селф, наме, радиус):
супер ().__инит __ (име)
себе.радијус = радијус
деф подручје (само):
резултат = 3.14 * себе.полупречник ** 2
принт ("\ нПовршина% с =% 5.2ф "% (само.име, резултат))
цал_ареа = инпут ("Коју област желите израчунати? троугао / круг \ н ")
ако је цал_ареа.горњи () == 'ТРОКУТ':
басе = флоат (инпут ('Унесите базу троугла:'))
хеигхт = флоат (инпут ('Унесите висину троугла:'))
обј = Трокут ('Трокут', основа, висина)
обј.област ()
елиф цал_ареа.горња () == 'КРУГ':
радијус = флоат (инпут ('Унесите радијус круга:'))
обј = Круг ('Круг', радијус)
обј.површина ()
иначе:
принт ("Погрешан унос")

Оутпут

У следећем излазу скрипта се извршава два пута. Први пут, троугао се узима као улаз и објект се иницијализује са три вредности, 'Троугао', база, и висина. Те вредности се затим користе за израчунавање површине троугла и излаз ће се исписати. Други пут, круг се узима као улаз, а објекат се иницијализује са две вредности, 'Круг' и радијус. Те вредности се затим користе за израчунавање површине круга и излаз ће се исписати.

Закључак

Овај чланак је на лаким примерима објаснио три различите употребе полиморфизма у Питхону. Концепт полиморфизма може се применити и без класа, метода која овде није објашњена. Овај чланак је читаоцима помогао да сазнају више о томе како применити полиморфизам у објектно оријентисаном Питхон програмирању.

Бесплатни и отворени кодни покретачки програми за развој Линук игара
Овај чланак ће обухватити листу бесплатних покретача игара отвореног кода који се могу користити за развој 2Д и 3Д игара на Линуку. Бројни су такви мо...
Водич за сенку Томб Раидера за Линук
Схадов оф тхе Томб Раидер је дванаести додатак серији Томб Раидер - акцијско-авантуристичкој игри коју је створио Еидос Монтреал. И критичари и фанови...
Како појачати ФПС у Линуку?
ФПС је скраћеница за Фрејмова у секунди. Задатак ФПС-а је да мери брзину кадрова у репродукцијама видео записа или играчким перформансама. Једноставни...