2013-04-22 104 views
0

我試圖追加一個項目到一個外部類的參數是一個列表,但我需要創建一個實例。但是,如何在不使用相同的類實例的情況下爲該類的參數創建一個實例?這裏是我想要做的一個小例子調用一個類的__init__屬性並追加到該屬性

class A(object): 
     def __init__(self, list1, arg1) 
      self.list1 = list1 
      self.arg1 = arg1 

    class B(object): 
     def __init__(self, arg2, arg3) 
      self.arg2 = arg2 
      self.arg3 = arg3 

     def method1(self, arg4) 
      self.arg4 = arg4 
      if 0 < 1: 
       A(A.list1, A.arg1).list1.append('newitem') 
      return list1 

我應該怎麼做才能將newItem追加到list1?

如果我不好好解釋自己,我很抱歉。我真的很困惑

EDIT(加入我的實際代碼)

class SimpleVirus(object): 

    def __init__(self, maxBirthProb, clearProb): 
     self.maxBirthProb = maxBirthProb 
     self.clearProb = clearProb 


    def reproduce(self, popDensity): 
     self.popDensity = popDensity 
     reproduceProb = self.getMaxBirthProb() * (1 - popDensity) 
     child = SimpleVirus(self.getMaxBirthProb(), self.getClearProb()) 
     VirusL = Patient.getVirusesList() 
     if random.random() <= reproduceProb: 
       #Down here is where I need to append to the "viruses" list 
      Patient(viruses, maxPop).viruses.append(child) 
      return child 
     else: 
      raise NoChildException() 


class Patient(object): 

    def __init__(self, viruses, maxPop): #viruses is a list 

     self.viruses = viruses 
     self.maxPop = maxPop 

回答

0

你的術語混淆; 「召集班級論證」對我來說並不意味着什麼。

您的代碼按原樣打破;您在A.__init__參數列表中有list1arg1,但在正文中使用arg2。請在示例中使用有意義的名稱,剪切並粘貼您正在運行的實際代碼以及您獲得的實際錯誤消息。

你想在Alist1arg2之前追加字符串嗎?如果,例如,你想要一個空單追加到和零arg2,然後執行:

A([],0).list1.append('newitem') 
0

我試圖理解你的代碼。這部分應予以刪除,因爲它並不意味着什麼:

self.arg4 = arg4 

您定義並在初始化單獨方法初始化類變量。這裏arg4是你方法的一個輸入,你只能通過它的名字來引用它,所以不需要那條線。

這部分也存在問題:

A(A.list1, A.arg1).list1.append('newitem') 

首先,你必須創建一個類的實例對象才把一些東西附加到它的變量之一。所以最好的方法是假定ARG4是A類的一個實例:

class A(object): 
    def __init__(self, list1, arg1): 
     self.list1 = list1 
     self.arg1 = arg1 

class B(object): 
    def __init__(self, arg2, arg3): 
     self.arg2 = arg2 
     self.arg3 = arg3 
    def method1(self, arg4): 
     if 0 < 1: 
      arg4.list1.append('newitem') 
     return arg4.list1 

下面是你可以在Python Shell中進行測試。

>>> arg = A ([],1) 
>>> b = B(2,3) 
>>> b.method1(arg) 
['newitem'] 
>>> 

首先我創建了一個名爲arg的類A的實例。然後是名字爲b的類B的對象。最後我調用b的method1,參數是arg。