クラスのリストがあり、クラスの別のリストを動的に作成しようとしています。それぞれが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を使用しています)