» »

Python class inheritance

Python class inheritance

twom ::

lib_datoteka.py
class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

class Student(Person):
  #več tisoč vrstic nastavitev (dict)
  pass

class Worker(Person):
  #več tisoč vrstic enakih nastavitev z drugimi vrednostmi (dict)
  pass
Ali gre obratno? Na primer:
class Person(Student OR Worker OR Teacher OR Toddler):
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

class Student():
  pass

class Worker():
  pass
V class Person imam veliko funkcij, ki jih rabim v Student, Worker, Teacher, Toddler

V glavnem programu sedaj, glede na potrebo, kreiram en objekt, recimo Person(Toddler).
Zadeva mi ne deluje elegantno, pa še circular reference imam,
obsežno bazo enakih nastavitev z različnimi vrednostmi v npr Toddler, ki jih rabim v Person, ko se izvede Person(Toddler)

Nastavitve obsegajo več tisoč vrstic za vsak "child", ki jih nebi tlačil v class Person. Ravno tako nebi rad imel v Lib mapi dodatne 4 py datoteke

Če ne bo šlo drugače bom datoteko razbil na dodatne datoteke:
from todder import Toddler
from student import Student
class Person:
  def __init__(self, what):
    if what == "student"...

temni_princ ::

Če so te propertyji skupni vsem, jih daj v Person kot instance variables.

RGB Potica ::

Načeloma je že pojav if stavkov v očetovskem razredu rdeč alarm. Če Person vsebuje logiko, ki je vezana na otroke, uporaba dedovanja nima smisla.
Se pravi drugi način (Person(Student)) ni smiselen, kaj bi pravzaprav sploh rad dosegel ?

Sem prehitro bral, če bi rad združil enake nastavitve bi bilo smiselno upoštevati nasvet kolega zgoraj in jih preprosto dati v __init__ metodo razreda Person.
Ostale nastavitve ostanejo v Student, Worker, Person, seveda moraš eksplicitno klicati podedovano metodo __init__.

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10319640 (10388) black ice
»

Predstavitev dvojiškega drevesa z seznamom

Oddelek: Programiranje
142257 (1857) ktka
»

[Python]Naloga z razredi in dedovanjem

Oddelek: Programiranje
101352 (1104) ktka
»

[c++] Orm... ActiveRecord pattern ... nasvet

Oddelek: Programiranje
51270 (1146) zhigatsey
»

Python, novo vprašanje...

Oddelek: Programiranje
61157 (1068) jype

Več podobnih tem