Tudtad, hogy egy osztályból példányt több, különböző argumentum alapján is létrehozhatsz?

Vegyünk például egy olyan osztályt, amelyből a három oldalhossz alapján háromszögeket mint példányokat tudunk előállítani. Ekkor az __init__ metódus az egyes oldalhosszakat fogadó három paraméterrel rendelkezik.

Egy háromszöget azonban nem csak a három oldalával adhatunk meg, hanem mondjuk egy oldalával és a rajta fekvő két szöggel, vagy két oldalával és a közöttük levő szöggel. Miként érhetjük el, hogy ugyanazon osztályban ezen adatokkal is tudjunk háromszögeket létrehozni?

A megoldást osztálymetódusok alkalmazásával érhetjük el. Minthogy az osztálymetódus magához az osztályobjektumhoz fér hozzá, így nem csak az attribútumait tudja befolyásolni, hanem az osztályt a metóduson belül meghívva példányosítani is tudunk, és e példány lehet az osztálymetódus visszatérési értéke. Az osztálymetódussal tehát lényegében egy olyan konstruktorfüggvényt tudunk megvalósítani, amely példányokat eredményez. Ezért ezeket – a hívható osztályobjektum mint konstruktortól való megkülönböztetéshez – példánygyártó metódusnak (factory method) is szokták nevezni.

Az alábbi programsorokban két példánygyártó metódussal kiegészítve látjuk a háromszögeket eredményező osztály definícióját. Az oldalakat a trigonometriából ismert szinusz és koszinusz tételek alapján számoljuk.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.