调用类的__init__属性并附加到该属性

时间:2013-04-22 21:41:16

标签: python

我正在尝试将一个项附加到外部类的参数,这是一个列表,但我需要创建一个实例。但是如何在不使用同一个类实例的情况下为该类的参数创建实例?这是我正在尝试做的一个小例子

  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?

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

编辑(添加我的实际代码)

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

2 个答案:

答案 0 :(得分:0)

你的术语很混乱; “召集阶级论证”对我来说没有任何意义。

您的代码已按原样分解;您在list1参数列表中有arg1A.__init__,但在正文中使用了arg2。请在示例中使用有意义的名称,并剪切并粘贴您正在运行的实际代码,以及您获得的实际错误消息。

您希望A的{​​{1}}和list1在追加字符串之前是什么?例如,如果您想要一个空列表追加到arg2的零,那么请执行以下操作:

arg2

答案 1 :(得分:0)

我想了解你的代码。应删除此部分,因为它没有任何意义:

self.arg4 = arg4

仅在 init 方法中定义和初始化类变量。这里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。