2012-03-05 79 views
0

定義類有一個名爲BasePlat.py一個Python文件,其中包含這樣的事情:實例和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 

但是我不知道我怎麼能在BasePlatform達到size參數。我想要這樣的東西(這不是真的代碼):

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

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

我該怎麼做?

+0

[PEP 8](http://www.python.org/dev/peps/pep-0008/)希望您將'BasePlat.py'和'BaseModel.py'重命名爲'baseplat.py'並且'basemodel.py' – 2012-03-05 09:07:33

回答

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__方法。

+1

它說TypeError:額外的未知kwargs {'size':8} – mahmood 2012-03-05 08:33:10

+0

好吧,你必須改變'BasePlatform'的'__init__'方法的定義,允許它接受'size'參數。 .. – StefanoP 2012-03-05 08:35:11

+0

艱難的任務,因爲我沒有寫......我會嘗試。 – mahmood 2012-03-05 08:36:56