Spero che questo è abbastanza chiaro:Python: Ottenere valori BaseClass dalla classe derivata
class myParent():
def __init__(self):
self.parentNumber = 5
class Child(myParent):
def __init__(self):
self.childNumber = 4
def multiplyNumbers(self):
print myParent.parentNumber * self.childNumber
p = Child()
p.multiplyNumbers()
desidero impostare il parentNumber individualmente, e quindi raggiungere quel numero tramite la classe del bambino, e in questo caso usarlo per un po ' moltiplicazione.
Sono nuovo nell'area OOP quindi qualsiasi suggerimento generale sull'ereditarietà è ben accetto!
Maggiori informazioni: Sto progettando una soluzione di gestione del progetto per i progetti di VFX-based, e sto giocando con le classi e l'ereditarietà per vedere come mi possono aiutare i più.
In questo momento, ho ottenuto la classe superiore, Project e una classe derivata, Shot. Il colpo ha una variabile autofiorente con la lunghezza dello sparo specifico. Ha anche un metodo getLengthInSeconds() che usa self.length insieme a Project.fps per determinare la lunghezza in secondi. Project ha un metodo setFps() in cui viene impostato l'fps dopo che è stata creata un'istanza della classe.
Sono abituato alle variabili che sono prefissate con il sé. e non ho mai sperimentato molto con le classi usando le variabili più "globali" senza auto. . Se creo tutto ciò che è globale, non me stesso, posso usare Project.fps senza problemi, ma ricevo un avviso di "cattiva programmazione" nella mia nuca. Forse c'è un modo migliore, più pulito?
Edit:
Dopo qualche lettura, super() sembra un pò pericoloso, e un po 'più di quello che serve penso. Ho principalmente classi di ereditarietà e non sono nemmeno sicuro di come utilizzare le gerarchie di diamanti. Esiste un modo più sicuro per accedere a variabili e metodi della superclasse che non includono super()?
Edit:
Allright, vedere se questo ha un senso o se sto pensando di sbagliato tutto.
Sto guardando le classi e l'ereditarietà come gruppi e bambini. Un bambino sa che è un genitore e tutti i suoi valori. Un figlio di un altro genitore sa che i valori dei genitori. Quello che sto cercando di realizzare è avere tutti gli scatti creati come parte di un progetto. E proprio ora sto creando istanze Shot() dalla classe Project(), aggiungendo le istanze a un elenco di scatti che viene poi mantenuto all'interno dell'istanza Project().
cioè
class myParent(object):
def __init__(self):
self.parent_id = ''
self.children = []
def createChild(self, name):
self.children.append(myChild(name))
def getChildren(self):
return self.children
def setParentId(self, id):
self.parentId = id
class myChild(myParent):
def __init__(self, id):
super(myChild, self).__init__()
self.id = id
def getParentId(self):
return self.parent_id
p = myParent()
p.setParentId('parent01')
p.createChild('child01')
print p.getChildren()[0].getParentId()
posso sorta di vedere i mis-passi in logica qui, ma nessun vero modo intorno ad esso .. sembra che ogni bambino è sempre una nuova istanza del genitore in questo modo, in cui parent_id è sempre una stringa vuota.
è necessario chiamare il costruttore della superclasse. –