記述子を使用して、numpy 配列の使用を強制します。これは問題なく動作しますが、クラスの属性がインスタンスであるかどうかを調べたいと思いますSpectrum
。私の考えは、をチェックしobj.__dict__
て使用することでしたがisinstance(obj, Spectrum)
、Spectrum.__get__
配列が返されるためisinstance(obj, Spectrum)
失敗します。これを解決する方法はありますか?
class Spectrum(object):
"""Class capable of containing spectral values."""
def __init__(self, name, dtype='float64'):
self.name = name
def __get__(self, instance, cls):
if instance is None:
return self
else:
print instance.__dict__
return instance.__dict__[self.name]
def __set__(self, instance, value):
if not isinstance(value, np.ndarray):
raise TypeError('Expected an ndarray')
instance.__dict__[self.name] = value
def __delete__(self, instance):
del instance.__dict__[self.name]
class Material(object):
loss_factor = Spectrum(name='loss_factor', dtype='Float64')
def __init__(self):
self.loss_factor = np.array([1, 2, 3])
def main():
obj = Material()
print isinstance(obj.loss_factor, Spectrum)