ループを使用してオブジェクトプロパティを作成し、setattr
関数を作成したいとします。 私が遭遇する問題は、そのようなループで作成されたすべてのプロパティが互いに等しいということです。ループでプロパティを作成する
次の例では、複素数であるz
という単一の属性を持つクラスA
を作成します。私はnum37のreal
とimag
のような関数をループして、z_real
とz_imag
のような他のプロパティを作成したいと思っています。この場合、この例の文脈では、z_real == z_imag
はTrue
です。これを実行している
import numpy as np
class A(object):
def __init__(self, z):
self.z = z
for func in [np.real, np.imag]:
fget = lambda x: func(x.z)
print('self.z_%s = %i' % (func.__name__, fget(self)))
setattr(self.__class__, 'z_%s' % (func.__name__),
property(fget))
a = A(1+2j)
print ('a.z_real=%i'% a.z_real)
print ('a.z_imag=%i'% a.z_imag)
self.z_real = 1
self.z_imag = 2
a.z_real=2
a.z_imag=2
をもたらし、これはなぜそれが私には明確ではありません。
私は、このように多くのプロパティを作成したいので。 – alex