希望這是非常明顯的:的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-項目的項目管理解決方案,並正在與類和繼承玩,看看他們如何能幫助我最。
現在,我已經得到了頂級課程,項目和一個派生類,Shot。 Shot具有一個self.length變量和特定鏡頭的長度。它還有一個getLengthInSeconds()方法,它使用self.length和Project.fps來確定長度(以秒爲單位)。 Project有一個setFps()方法,其中在創建類的實例之後設置fps。
我很習慣以self爲前綴的變量。並沒有用更多的「全局」變量在沒有自我的情況下嘗試過很多類。 。如果我把所有東西都做成全球化的東西,那麼我就可以毫無麻煩地使用Project.fps,但是我在我的neckhair中收到了一個「糟糕的編程習慣」警告。也許有更好,更整潔的方式?
編輯:
一些閱讀後,超()似乎有點危險,有點比我更需要我的想法。我主要有單繼承類,甚至不知道如何使用鑽石層次結構。是否有更安全的方式來訪問超類變量和方法,不包括super()?
編輯:
還好吧,看看這是有道理的,或者如果我想這都是錯誤的。
我正在尋找類和繼承作爲組和孩子。一個孩子知道它是父母,所有的價值。一個孩子到另一個父母知道父母的價值觀。我試圖完成的是將所有鏡頭創建爲項目的一部分。現在,我從Project()類中創建Shot()實例,將實例添加到項目()實例中保留的鏡頭列表中。
即
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始終是一個空字符串。
你需要調用父類的構造。 – 2011-02-08 16:32:31