在python中实例化和定义类

时间:2012-03-05 08:06:45

标签: python class

有一个名为BasePlat.py的python文件包含这样的内容:

class BasePlatform(SimObj):
  type = 'BasePlatform'
  size = Param.Int(100, "Number of entries")

class Type1(BasePlatform):
  type = 'Type1'
  cxx_class = 'Type1'

现在,此文件用于另一个名为BaseModel.py

的文件中
from BasePlat import BasePlatform
class BaseModel(ModelObj):
  type = 'BaseModel'
  delay = Param.Int(50, "delay")
  platform = Param.BasePlatform(NULL, "platform")

这些文件定义参数。在另一个文件inst.py中,一些模型被实例化,我可以修改参数。例如,我可以定义两个具有不同延迟的模型。

class ModelNumber1(BaseModel):
  delay = 10

class ModelNumber2(BaseModel):
  delay = 15

但我不知道如何在size中找到BasePlatform参数。我想要这样的东西(这不是真正的代码):

class ModelNumber1(BaseModel):
  delay = 10
  platform = Type1
  **platform.size = 5**

class ModelNumber2(BaseModel):
  delay = 15
  platform = Type1
  **platform.size = 8**

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您定义的属性位于类级别,这意味着该类的每个实例将共享相同的对象(在定义时实例化)。

如果您希望ModelNumber1ModelNumber2拥有不同的platform个实例,则必须覆盖其定义。像这样:

class ModelNumber1(BaseModel):
  delay = 10
  platform = Param.Type1(NULL, "platform", size=5)

class ModelNumber2(BaseModel):
  delay = 15
  platform = Param.Type1(NULL, "platform", size=8)

使用以下内容编辑BasePlatform类定义:

class BasePlatform(SimObj):
  type = 'BasePlatform'
  size = Param.Int(100, "Number of entries")

  def __init__(self, size=None):
    if size:
      self.size = size
      # or, if size is an integer:
      # self.size = Param.Int(size, "Number of entries")

如果您无权访问BasePlatform定义,仍可以将其子类化为MyOwnBasePlatform并自定义__init__方法。