Python

Полиморфизъм в Python

Полиморфизъм в Python
Полиморфизъм означава „много форми.”Полиморфизмът е важна характеристика на обектно-ориентираното програмиране (ООП).  Когато един и същ метод се декларира многократно, за множество цели и в различни класове, тогава той се нарича полиморфизъм. Друга характеристика на ООП е наследство, чрез който може да се създаде дъщерният клас чрез наследяване на характеристиките на родителския клас. Понякога се изисква програмистът да декларира метод със същото име както в родителския, така и в детския клас за различни цели. Този тип задачи могат да бъдат изпълнени и чрез използване на полиморфизъм. Тази статия обяснява как полиморфизмът може да бъде дефиниран в обектно-ориентирано програмиране (OOP).

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

Следният скрипт показва използването на полиморфизъм между два различни класа. Функция се използва за създаване на обекта на тези класове. Стойността на имената на променливата цвят се инициализира в __в него__() метод както на "Папагал"и"Щраус'класове по време на създаването на обект. The Характеристика() метод е дефиниран и в двата класа, но изходът на метода за всеки клас е малко по-различен. The Create_Object () функция се използва за създаване на обект от класа. Тази функция се изпълнява два пъти, за да създаде обекта в 'Папагал"клас и в"Щраус'клас. Всеки ще извика метода features () от двата класа и ще отпечата резултата.

#!/ usr / bin / env python3
# Определете класа Parrot
клас Parrot ():
def __init __ (самостоятелно, цвят):
себе си.цвят = цвят
def функции (самостоятелно):
print ("Цветът на папагала е% s"% самостоятелно.цвят)
print ("Папагалът може да лети")
# Определете класа Щраус
клас Щраус ():
def __init __ (самостоятелно, цвят):
себе си.цвят = цвят
def функции (самостоятелно):
print ("Цветът на щрауса е% s"% самостоятелно.цвят)
print ("Щраусът не може да лети")
# Дефинирайте функцията за извикване на метода на класа
def Create_Object (Object):
Обект.Характеристика()
# Създаване на обект от клас Parrot
Create_Object (Parrot ('Green'))
# Създаване на обект от клас Щраус
Create_Object (Щраус („Черно и бяло“))

Изход

Следващият изход показва, че обектът на 'Папагал'класът е създаден с'Зелено"като цвят стойност. Функцията отпечатва изхода чрез извикване на Характеристика() метод наПапагал'клас. След това обектът на 'Щраус'класът е създаден с'Черно и бяло"като цвят стойност. Функцията отпечатва изхода чрез извикване на Характеристика() метод наЩраус'клас.

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

Както в предишния пример, следващият скрипт показва използването на полиморфизъм в два различни класа, но не се използва персонализирана функция за деклариране на обекта. The __в него__() метод както на "Мениджър' и 'Чиновник'класовете ще инициализират необходимите променливи. Полиморфизмът е реализиран тук чрез създаване на post_details () и заплата() методи в двата класа. Съдържанието на тези методи е различно за всеки от тези класове. След това обектните променливи се създават за двата класа и се итерират от a за цикъл. Във всяка итерация, post_details () и заплата() се извикват методи за отпечатване на изхода.

#!/ usr / bin / env python3
# Дефинирайте клас с име Manager
клас мениджър:
def __init __ (аз, име, отдел):
себе си.име = име
себе си.post = 'Мениджър'
себе си.отдел = отдел
# Определете функцията за задаване на подробности
def post_details (самостоятелно):
ако аз.отдел.горна () == 'HR':
себе си.основно = 30000
друго:
себе си.основно = 25000
себе си.houseRent = 10000
себе си.транспорт = 5000
print ("Публикацията на% s е% s"% (самостоятелно.име, аз.пост))
# Определете функцията за изчисляване на заплатата
def заплата (самостоятелно):
заплата = себе си.основно + себе си.houseRent + самостоятелно.транспорт
връщане на заплата
# Определете клас с име Clerk
клас чиновник:
def __init __ (самостоятелно, име):
себе си.име = име
себе си.post = 'Служител'
# Определете функцията за задаване на подробности
def post_details (самостоятелно):
себе си.основно = 10000
себе си.транспорт = 2000
print ("Публикацията на% s е% s"% (самостоятелно.име, аз.пост))
# Определете функцията за изчисляване на заплатата
def заплата (самостоятелно):
заплата = себе си.основно + себе си.транспорт
връщане на заплата
# Създайте обекти за класовете
manager = Manager ("Kabir", "hr")
чиновник = чиновник ("Робин")
# Извикайте едни и същи функции от различните класове
за obj in (мениджър, чиновник):
обект.post_details ()
print ("Заплатата е", obj.заплата())

Изход

Следващият изход показва, че обектът на 'Ясла'class се използва в първата итерация на за цикъл и заплатата на мениджъра се отпечатва след изчисление. Обектът наЧиновник'class се използва във втората итерация на за цикъл и заплатата на чиновника се отпечатва след изчисление.

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

Следният скрипт показва използването на полиморфизъм между две детски класове. Тук и дветеТриъгълник' и 'Кръг'са дъщерните класове на родителския клас с име'Geometric_Shape.'Според наследството класът-дете може да има достъп до всички променливи и методи на родителския клас. The __в него__() метод наGeometric_Shape'class се използва и в двата дъщерни класа за инициализиране на променливата име с помощта на супер () метод. Стойностите на база и височина от 'Триъгълниккласът ще бъде инициализиран по време на създаването на обекта. По същия начин стойностите на радиуса на 'Кръгкласът ще бъде инициализиран по време на създаването на обекта. Формулата за изчисляване на площта на триъгълник е ½ × база × височина, което е внедрено в ■ площ() метод наТриъгълник'клас. Формулата за изчисляване на площта на кръг е 3.14 × (радиус)2, което е внедрено в ■ площ() метод наКръг'клас. Имената на двата метода тук са еднакви, но целта е различна. След това от потребителя ще бъде взета низова стойност, за да се създаде обект и да се извика методът въз основа на стойността. Ако потребителят напише „триъгълник“, тогава обект на „Триъгълник клас ще бъде създаден и ако потребителят напише "кръг", тогава обект на "Кръг" клас ще бъде създаден. Ако потребителят напише текст без „триъгълник“ или „кръг“, тогава няма да се създаде обект и ще се отпечата съобщение за грешка.

#!/ usr / bin / env python3
# Дефинирайте родителския клас
клас Geometric_Shape:
def __init __ (самостоятелно, име):
себе си.име = име
# Определете детски клас за изчисляване на площта на триъгълника
клас Триъгълник (Geometric_Shape):
def __init __ (самостоятелно, име, основа, височина):
супер ().__init __ (име)
себе си.основа = основа
себе си.височина = височина
деф зона (самостоятелно):
резултат = 0.5 * себе си.основа * себе си.височина
print ("\ nПлощта на% s =% 5.2f "% (самостоятелно.име, резултат))
# Определете детски клас за изчисляване на площта на кръга
клас Circle (Geometric_Shape):
def __init __ (самостоятелно, име, радиус):
супер ().__init __ (име)
себе си.радиус = радиус
деф зона (самостоятелно):
резултат = 3.14 * себе си.радиус ** 2
print ("\ nПлощта на% s =% 5.2f "% (самостоятелно.име, резултат))
cal_area = input ("Коя област искате да изчислите? триъгълник / кръг \ n ")
ако cal_area.горна () == 'ТРИЪГЪЛНИК':
base = float (input ('Въведете основата на триъгълника:'))
височина = плувка (въвеждане ('Въведете височината на триъгълника:'))
obj = Триъгълник ('Триъгълник', основа, височина)
обект.■ площ()
elif cal_area.горна () == 'КРЪГ':
радиус = плаващ (вход ('Въведете радиуса на кръга:'))
obj = Кръг ("Кръг", радиус)
обект.■ площ()
друго:
print ("Грешен вход")

Изход

В следващия изход скриптът се изпълнява два пъти. Първият път, триъгълник се приема за вход и обектът се инициализира от три стойности, 'Триъгълник', база, и височина. След това тези стойности се използват за изчисляване на площта на триъгълника и изходът ще бъде отпечатан. Вторият път, кръг се приема за вход и обектът се инициализира от две стойности, 'Кръг' и радиус. След това тези стойности се използват за изчисляване на площта на кръга и изходът ще бъде отпечатан.

Заключение

Тази статия използва лесни примери, за да обясни три различни приложения на полиморфизма в Python. Понятието полиморфизъм може да се прилага и без класове, метод, който не е обяснен тук. Тази статия помогна на читателите да научат повече за това как да приложат полиморфизма в обектно-ориентираното програмиране на Python.

Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...
HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...
Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...