2013-04-22 91 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。