1

クラスのリストがあり、クラスの別のリストを動的に作成しようとしています。それぞれがclassmethod、元のリストからクラスの子のインスタンスを作成する を持っています。
問題は、すべてのメソッドが同じクラス (最後に作成されたもの) のインスタンスを返すことになることです。

これが私のコードの最小化されたバージョンです:

class C1():
    var = 1
class C2():
    var = 2

parents = (C1, C2)
children = []
wrappers = []

for c in parents:

    class ChildClass(c):
        pass
    children.append(ChildClass())

    class Wrapper():
        @classmethod
        def method(cls):
            cls.wrapped = ChildClass()

    wrappers.append(Wrapper)

print(list(child.var for child in children))

for wrapper in wrappers:
    wrapper.method()

print(list(wrapper.wrapped.var for wrapper in wrappers))

出力:

[1, 2]
[2, 2]

childrenリストにはさまざまなインスタンスが含まれていることがわかりますが、どちらの場合もclassmethodの子のインスタンスが作成されます。C2

classmethodそれぞれが正しいクラスのインスタンスを作成するようにコードを修正するにはどうすればよいですか?

(私はpython 2.7.4を使用しています)

4

1 に答える 1