希望から基底クラスの値を取得することは、これは十分に明確である:Pythonの:派生クラス
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()
私が個別にparentNumberを設定し、子クラスを経由してその数に達しており、この場合には、いくつかのためにそれを使用したいです乗算。
私はOOP領域が新しく、継承に関する一般的なポインタも同様に歓迎されています。
さらに詳しい情報: 私はVFXベースのプロジェクトのためのプロジェクト管理ソリューションを設計しています、そして、彼らはほとんど私を助けることができる方法を確認するために、クラスや継承で遊んでいます。
今、私はトップクラスのProjectと派生クラスShotを持っています。 Shotには、特定のショットの長さを持つself.length変数があります。また、self.lengthとProject.fpsを使用して長さを秒単位で決定するgetLengthInSeconds()メソッドもあります。プロジェクトには、クラスのインスタンスが作成された後にfpsが設定されるsetFps()メソッドがあります。
私は変数に接頭辞selfを使用するのに慣れています。自己以外のより「グローバル」な変数を使ったクラスではあまり実験していません。 。私はすべてのことをグローバルにしても自分自身ではなく、Project.fpsを面倒なく使うことができますが、私は首の髪に「悪いプログラミングの練習」の警告を出しています。おそらくもっと良い、よりきれいな方法がありますか?
編集:
いくつか読みになった後、スーパー()はちょっと危険なようだ、と私は考える必要があるよりも少し。私は主に単一継承クラスを持っていて、ダイヤモンド階層をどのように使用するかについてもわかりません。super()を含まないスーパークラス変数とメソッドにアクセスするより安全な方法はありますか?
編集:私はそれ間違っているすべてのことを考えている場合
オールライトは、これは理にかなっているかどうか。
私はグループと子としてクラスと継承を見ています。子供はそれが親であり、それがすべて価値であることを知っています。子供は別の親に知っていることは親の価値を知っている。私が達成しようとしているのは、すべてのショットをプロジェクトの一部にすることです。そして今、私はProject()クラス内からShot()インスタンスを作成し、そのインスタンスをProject()インスタンス内で管理されているショットのリストに追加します。
すなわち
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()
すべての子供がこのよう親の新しいインスタンスを取得しているように、私は一種の...ここにロジックでミスステップが、その周りにいない現実的な方法を見ることができ はそう、どこparent_idは常に空文字列です。
あなたはスーパークラスのコンストラクタを呼び出す必要があります。 –