Python Polimorfizm

Python Polimorfizm

Wstęp

Polimorfizm to kolejny ważny aspekt programowania obiektowego. Żadnych fanów Warcraft, nie ma to nic wspólnego z przekształcaniem ludzi w owce. To byłoby znacznie chłodniejsze. Zamiast tego polimorfizm pozwala metodom i funkcjom używać klas o podobnej funkcjonalności w ten sam sposób.

Polimorfizm ogranicza ilość kodu, który musisz napisać, eliminując redundancję w logiczny i znaczący sposób. Opiera się na tobie, programista, aby być sprytnym w twoim projekcie i uprzęży podobieństw w obiektach.

Co to jest polimorfizm?

Polimorfizm jest jedną z tych rzeczy, które trudno zdefiniować w jednym słowie lub frazie. Termin ten przyjmuje nieco inne formy w różnych językach programowania, co utrudnia zwięzłe przypięcie. Ogólnie rzecz biorąc, aw Python jest to zdolność wielu różnych obiektów pochodzących z różnych klas do użycia w ten sam sposób.

Aby użyć przykładu samochodów, z którymi pracował ten przewodnik, wyobraź sobie, że musisz napisać funkcję, która wywołuje pójść naprzód Metoda każdego rodzaju samochodu, który został przekazany. Każdy obiekt utworzony z oryginalnej klasy „samochodowych” lub dowolnej podklasy, która go rozszerzyła pójść naprzód Metoda, nawet jeśli została zastąpiona, aby zrobić coś nieco inaczej w niektórych podklasach. Oznacza to, że poprzez polimorfizm możesz napisać jedną funkcję, która przyjmuje obiekt „samochodu” i wywołuje pójść naprzód. Ponieważ wszystkie obiekty utworzone z podklasy „samochodu” są nadal technicznie „samochodem” i mają wszystkie swoje oryginalne właściwości w takiej czy innej formie, to zadziała.

Należy pamiętać, że specyfikacja pojedynczej nadklasy do użycia jako typu obiektu nie jest całkowicie konieczna w Pythonie. Python nie jest silnie wpisany, więc nie musisz jawnie definiować, które typy zmienne podejmuje metoda lub funkcja. W językach takich jak Java odgrywa to rolę w zachowaniu polimorfizmu. Jednak w Python dobrym pomysłem jest pomyśleć o tym w tych wierszach, aby upewnić się, że obiekty, które wychodzisz.

Używanie go w Pythonie

Teraz naprawdę pomogłoby to zobaczyć to wszystko w akcji. To nie jest tak złożone, jak prawdopodobnie teraz myślisz. Najpierw upewnij się, że jesteś skonfigurowany z przykładowymi klasami. Jeśli jeszcze ich nie masz, są tuż poniżej.

Class Car (Object): def __init __ (self, make = 'ford', model = 'pinto', rok = '1971', przebieg = 253812, color = 'Orange'): self.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = Color def set_make (self, make): self.__make = uczyń def get_make (self): powrót siebie.__make def set_model (self, model): self.__model = model def get_model (self): powrót siebie.__Model def set_year (ja, rok): jaźń.__year = rok def get_year (self): powrót siebie.__year def set_mileage (self, przebieg): jaźń.__mileage = przebieg def get_mileage (self): powrót siebie.__mileage def set_color (self, kolor): self.__color = kolor def get_color (self): powrót siebie.__color def Mov_Forward (Self, Speed): Drukuj („Twój %s idzie naprzód w %s” %(jaźń.__model, prędkość)) def Move_backward (self, prędkość): Drukuj („Cofnij się do wstecz w % s” % prędkość) klasa MuscleCar (CAR): def __init __ (self, make = 'ford', model = 'Mustang', rok = „1965”, przebieg = 54032, Color = „Blue”, HP = 325): super ().__init __ (make, model, rok, przebieg, kolor) jaźń.__HP = hp def set_hp (self, hp): self.__HP = hp def get_hp (self): powrót siebie.__HP def drag_race (self, przeciwnik): if (self.__HP> przeciwnik.get_hp ()): powrót „wygrywasz!„Else: powrót” przegrywasz!„def Trade_up (self, rok, kolor): super ().set_year (rok) super ().set_color (kolor) super ().set_mileage (0) 

Po skonfigurowaniu klas demo możesz przetestować szybką funkcję, która wykorzystuje polimorfizm do wywołania pójść naprzód.

newMuscLecar = musclecar () newCar = car () def go_25 (car_object): car_object.Move_forward („25 km / h) GO_25 (newCar) GO_25 (NewMuscLecar) 

Oba wywołania funkcji zachowują się dokładnie tak samo, mimo że zostały one przekazane różne obiekty, które zostały utworzone z różnych klas. Dzięki polimorfizmowi nie musisz pisać dwóch różnych funkcji i możesz używać podobnych właściwości obiektów do pisania tylko jednej funkcji.

Spróbuj zastąpić jeden z pójść naprzód Metoda w klasie „Musclecar”. Uruchom funkcję ponownie i zobacz, co się stanie.

 klasa MuscleCar (samochód):… def Move_forward (Self, Speed): Drukuj („Twój niesamowity %s ryczy w dół drogi w %s” %(jaźń.__Model, prędkość))… 

Kiedy funkcja wywołuje pójść naprzód Metoda na obiekcie samochodów mięśniowych nadal działa idealnie, a zastosowana jest zastąpiona wersja metody.

Zamykanie myśli

Polimorfizm brzmi tak, jakby był to strasznie złożona koncepcja, ale jego nazwa jest nieco błędna producent. Sama koncepcja nie jest aż tak zastraszająca, a nawet pomaga uprościć ogólną strukturę kodu.

Wspólnym tematem programowania zorientowanego na obiekt jest eliminacja redundancji za pośrednictwem kodu wielokrotnego użytku i elastycznego. Polimorfizm jest ważną częścią tego obrazu.

Ćwiczenia

  1. Użyj przykładowych klas, aby ulepszyć obiekt „samochodowy” i obiekt „MUSCLECAR”.
  2. Utwórz funkcję, która może oddziaływać z dowolnym typem obiektu „samochodu”.
  3. Wywołaj swoją funkcję dwa razy, przekazując oba obiekty.
  4. Zastąp jedną z metod w klasie MuscleCar. Pamiętaj, aby nie zmieniać parametrów, które zaakceptuje drastycznie.
  5. Zadzwoń ponownie do swojej funkcji.
  6. Utwórz nową klasę, która dziedziczy po klasie „samochodu”.
  7. Utwórz nowy obiekt z nowo utworzonej klasy. Przekaż obiekt do swojej funkcji.

Powiązane samouczki Linux:

  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
  • Jak napisać rozszerzenia Nautilus z Nautilus-Python
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Konfigurowanie ZFS na Ubuntu 20.04
  • Mastering Bash Script Loops
  • Jak pracować z WooCommerce Rest API z Pythonem
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • EEPROM CH341A Programator - Odczyt i zapisz dane do układu na…