有一个名为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**
我该怎么做?
答案 0 :(得分:2)
您定义的属性位于类级别,这意味着该类的每个实例将共享相同的对象(在定义时实例化)。
如果您希望ModelNumber1
和ModelNumber2
拥有不同的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__
方法。