2012-07-20 34 views
-2

我正在編寫有兩個類的代碼。一個類爲3D環境創建文本元素。另一個將在這種環境下將它們組合在一起。我想要做的是有第一類的第二類調用實例。換句話說,在def makeGroup中,我希望能夠調用class msg的實例。編碼如何措辭?目前,第一個類繼承了第二個類,然後我試圖調用對象self.text,但我不知道該如何引用它。我不相信我很正確地使用繼承。在另一個類中引用類實例

class msg: 
    def __init__(self,num,unit): 
     self.message = str(num) + ' ' + unit 
     self.num = num 
     self.text = viz.addText(self.message) 

class msgGroup(msg): 
    def __init__(self,x,y,z): 
     self.msgLs=[] 
     self.ghostMsg= viz.addText('',pos=[x,y,z],color= [0.000, .9, 0.071]) 
     self.msgLs.append(self.ghostMsg) 

    def makeGroup(self): 
     msg.text.setPosition([0,(len(self.msgLs)-1)*-1.5,0], viz.REL_PARENT) 
     self.msgLs.append(msg.text) 
+1

你有問題嗎?你有什麼問題?請參閱http://sscce.org/和http://whathaveyoutried.com/ – Marcin 2012-07-20 17:53:41

回答

2

五兩件事:

  1. 如果是這樣的Python 2,你msg類應該從object
  2. PEP8繼承:如果你不遵循這一點,沒有人將能夠按照你的代碼
  3. 如果msgGroup繼承自msg,那麼每個msgGroup實例也具有msg實例具有的所有成員(數據,方法和更奇特的東西)。在您的方法makeGroup中,要引用當前實例的text成員,請執行self.text
  4. 您可能希望每個msgGroup有幾個msg s。要做到這一點,不要使用繼承,只是有msgGroupmsg秒的列表,並遍歷它:

    for msg in self.msg_list: 
        print msg.text 
    
  5. 參考對象或類的成員不叫「稱其爲」 。您可以使用()運算符來調用函數,方法和其他可調用對象(如類)。

    foo = self.makeGroup # assigning makeGroup to a variable 
    bar = self.makeGroup() # calling makeGroup, then assigning the result of that call to a variable 
    
+0

如果我列出「msg」,那麼它仍不屬於「class msg」的一部分?除了在函數的末尾加入'list.append(self.text)'之外,還有另外一種方法來創建這個列表嗎? – user1496630 2012-07-20 18:34:14

+0

不,msg的列表將在msgGroup類的實例中。如果你已經收集了所有你需要的數據或者可以隨時獲得的數據,還有其他方法可以創建元素並將其添加到列表中,例如'msg_list + = [whatever]'或者使用通常稱爲列表理解的東西,這是將在單個語句中創建列表的代碼。在[documentation]中有更多關於它們的信息(http://docs.python.org/reference/expressions.html?highlight=comprehension#list-displays)。 – martineau 2012-07-20 18:47:14

+0

@martineau如果'msgGroup'實例沒有使用其他數據結構,它如何保存'msgs'?您可以在自己的答案中滾動自己的鏈接列表 - 在這個答案中,高級集合使用內置集合。 – Marcin 2012-07-20 18:55:15

2

不,你的確誤解了遺傳。繼承是當B類與A類共享所有相同的屬性,但有更多,也許更具體:例如一個人是一個人。

你的情況不同:你有一個組,並且一個組有消息。這是構圖,而不是繼承:「has-a」,而不是「is-a」。您應該簡單地在msgGroup中定義一個message_list,然後向它添加消息,然後您可以遍歷消息並訪問它們的text屬性。

相關問題