0

コンポーネント オブジェクトのライブラリがあります。これらのオブジェクトの選択のインスタンス化を別のオブジェクトに含めたいと思います。しかし、リストを使用してコンテナー オブジェクトをインスタンス化するたびに、指定されたサブ オブジェクトを含むコンテナー オブジェクトが作成されるように、その選択をリストとして提供したいと考えています。

コンポーネント ライブラリが次のようになっているとします。

class ColorBlob(object):
    ...
    def wipeItUp()
        ...

class RedBlob(ColorBlob):
    ...
    def paintIt()
        ...
class YellowBlob(ColorBlob):
    ...
    def paintIt()
        ...
class BlueBlob(ColorBlob):
    ...
    def paintIt()
        ...

そして、私のコンテナオブジェクトは次のようになります:

class Pallet(object):
    def __init__(self, colorList):
        for color in colorList:
            #Ok, here is where I get lost if I know the color I can do this:
            Pallet.BlueBlob = blobLib.BlueBlob()
            #But I don't, so I am trying to do something like this:
            blobSpecs       = getattr(blobLib, color)
            blobSpecs.Obj   = blobSpecs().returnObj(self.page) # with "returnObj" defined in the library as some other method
            setattr(self, Pallet.blobName, blobSpecs) #and I am completely lost.

しかし、機能コードで本当にやりたいことは次のとおりです。

workingPallet=Pallet(['RedBlob', 'BlueBlob'])
workingPallet.RedBlob.paintIt()

コンテナー内のサブ オブジェクトをインスタンス化しようとすると、道に迷ってしまうことがわかっています。誰かが私の「getattr」と「setattr」のナンセンスを正すのを手伝ってくれますか?

4

1 に答える 1

2

あなたはほとんどそこにいましたが、それはあなたではないgetattrか、それがsetattr問題です。self作成したインスタンスではなく、クラスをオンに戻すことになります。

def __init__(self, colorList):
    for color in colorList:
        blobSpec       = getattr(blobLib, color)
        blob           = blobSpec()    # create an instance of the blob
        blob.Obj       = blob.returnObj(self.page) 
        setattr(self, color, blob)

これは、クラスを直接呼び出す()と同じですBlueBlob()が、変数を介して呼び出すようになりました。

于 2013-01-25T13:54:53.637 に答える