( hrgy84 | 2012. 03. 16., p – 21:37 )

Szerintem sejtem a problemadat. Egyvalamit erts meg: Pythonban, Rubyban es a hasonlo dinamikus nyelvekben akkor extendalunk valamit, ha az adott osztaly kepessegeit ki szeretnenk boviteni, a meglevo funkcionalitas megtartasa mellett. Tehat, ha en peldaul egy SMTP osztalyt ki akarok boviteni az SMTP/TLS es az SMTP/SSL tamogatasanak kepessegevel, akkor csinalok egy gyerekosztalyt, ahol a megfelelo fuggvenyeket felulvagom.
Ha valamit csak _hasznalni_ szeretnek, akkor egyszeruen az abbol az objektumbol kepzett peldany referenciajat elmentem egy attributumba:


class KisOsztaly:
  def __init__(self):
    self._smtp = SMTP(host="127.0.0.1", port=25, tls=False, ssl=True)

Amennyiben egy meglevo osztalyt bovitesz ki funkcionalitasban, akkor igenis tessek tisztaba lenni azzal, hogy a parent osztaly milyen valtozokat hasznal.

Ez alol altalaban egy kivetel van, a GUI osztalyok, amikor egy widgetet kell megjelolnod mint parent osztalyt ahhoz, hogy az osztalyod az adott widgetkent funkcionaljon. Altalaban veve azonban a widget osztalyok viszonylag keves attributumot definialnak, azokat is alahuzasos elotaggal, ha te nem hasznalsz ilyet, akkor nem erdekes.

Vannak meg ilyen extrem esetek, hogy pluginek, meg hasonlok, mert ugye a python nem tud olyat, hogy "implements", de itt csak feluletet orokolsz, semmi egyebet, es altalaban nincsenek is attributumok, csak egy contract, hogy biztos meghivhato legyen az adott metodus, legfeljebb hulyeseget ad vissza.

Ha nagyon egyedi attributumra van szukseged, akkor csinalhatsz olyat, hogy pl. self.__jack_mailer_smtp, es akkor totalbiztosan egyedi attributumod van, mert a hierarchiara mar azert csak odafigyelsz.. :-)
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal