0Pricing
Python Academy · Ders

Çok Biçimlilik ve Ördek Tiplemesi

Uyumlu herhangi bir nesneyle çalışabilen çok biçimli kod yazın.

Çok Biçimlilik ve Ördek Tiplemesi, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Giriş

Polimorfizm, farklı nesnelerin aynı arayüze yanıt vermesini sağlar. Ördek tiplemesi şu anlama gelir: Ördek gibi davranıyorsa ördektir.

Polimorfizm Nedir?

Polimorfizm, birçok biçim anlamına gelir. Aynı yöntem adı, farklı nesnelerde farklı şekilde çalışır. Python bu yaklaşımı yoğun biçimde benimser.
class Cat:
    def speak(self): return 'Meow'
class Dog:
    def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
    print(animal.speak())

Ördek Tiplemesi

Python, polimorfizm için bir sınıf hiyerarşisi gerektirmez. Bir nesne doğru yönteme sahipse çalışır. Arayüzlere gerek yoktur.
class Duck:
    def quack(self): return 'Quack'
class Person:
    def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
    print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())

Polimorfik İşlevler

len(), dizeler, listeler, sözlükler ve demetler üzerinde çalışır; bunun nedeni hepsinin __len__ uygulamasıdır. Bu, yerleşik polimorfizmdir.
for obj in ['hello', [1,2,3], {'a':1}]:
    print(type(obj).__name__, len(obj))

Operatör Aşırı Yükleme

+ işareti tamsayılar, kayan noktalı sayılar, dizeler ve listeler üzerinde çalışır; çünkü her biri __add__ yöntemini farklı şekilde uygular.
print(1 + 2)        # int addition
print('a' + 'b')    # string concat
print([1] + [2])    # list concat

Protokol Tabanlı Ördek Tiplemesi

Yineleme protokolü: __iter__ ve __next__ yöntemlerine sahip her nesne, bir temel sınıfa gerek olmadan for döngülerinde çalışır.
class Squares:
    def __init__(self, n): self.n,self.i=n,0
    def __iter__(self): return self
    def __next__(self):
        if self.i>=self.n: raise StopIteration
        x=self.i**2; self.i+=1; return x
print(list(Squares(5)))

EAFP ve LBYL

EAFP (İzin istemektense bağışlanma dilemek daha kolaydır) try/except kullanır. LBYL (Atlamadan önce bak) if/hasattr kullanır. Python EAFP'yi tercih eder.
# LBYL:
if hasattr(obj, 'quack'):
    obj.quack()
# EAFP (Pythonic):
try:
    'hello'.quack()
except AttributeError:
    print('no quack')

Güvenli Dağıtım için isinstance()

Türe özgü davranış gerektiğinde isinstance(), AttributeError yakalamaktan daha temiz bir çözümdür.
def process(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, list):
        return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))

Protokol Olarak Soyut Temel Sınıflar

from abc import ABC, abstractmethod biçimsel protokoller tanımlar. Alt sınıflar, soyut yöntemleri uygulamak zorundadır.
from abc import ABC, abstractmethod
class Drawable(ABC):
    @abstractmethod
    def draw(self): pass
class Circle(Drawable):
    def draw(self): print('O')
Circle().draw()

typing.Protocol (3.8+)

class MyProtocol(Protocol):, ABC olmadan yapısal alt türlemeyi tanımlar. Statik denetimler için mypy ile çalışır.
from typing import Protocol
class Quackable(Protocol):
    def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
    return x.quack()
print('protocol demo')

Uygulamada Polimorfizm

Doğru arayüze sahip herhangi bir nesneyi kabul eden API'ler tasarlayın. Böylece kodunuzu değiştirmeden genişletebilirsiniz.
class JSONSerializer:
    def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
    def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
    return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))

Hızlı Yoklama

Python'da ördek tiplemesi ne anlama gelir?

Özet

Polimorfizm: aynı arayüz, farklı davranış. Ördek tiplemesi: önemli olan tür değil, davranıştır. Protokoller arayüzleri biçimsel olmayan şekilde tanımlar. EAFP (try/except) Python'a özgü yaklaşımdır.

Devam Edin

Mükemmel ilerliyorsunuz! Bir sonraki kavramda ustalaşmak için devam edin.

Sıkça Sorulan Sorular

“Çok Biçimlilik ve Ördek Tiplemesi” dersi ücretsiz mi?

Evet — “Çok Biçimlilik ve Ördek Tiplemesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“Çok Biçimlilik ve Ördek Tiplemesi” dersinde ne öğreneceğim?

Uyumlu herhangi bir nesneyle çalışabilen çok biçimli kod yazın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Çok Biçimlilik ve Ördek Tiplemesi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tekli Kalıtım
  2. Yöntem Geçersiz Kılma ve super()
  3. Çoklu Kalıtım ve MRO
  4. Çok Biçimlilik ve Ördek Tiplemesi
← Python Academy Sayfasına Dön