PyContract(PyContractsではない)を使用して、クラスメソッドのいくつかの制約を記述しています。id(self)
事後条件として、インスタンスのメモリアドレスが変更されていないこと、つまり関数を呼び出す前後で同じである必要があることを確認したいと思います。PyContractでこれを行うにはどうすればよいですか?私は次の(最小限の)コードを持っています:
class Individual:
def append(self, chrom):
"""
post:
__old__.self is self
len(__old__.self.chromosomes)+1 == len(self.chromosomes)
self.chromosomes[-1] == chrom
"""
self.chromosomes.append(chrom)
ここでの制約の問題は、投稿時に次のエラーが発生することです。_holder instance has no attribute 'self'
ここで興味深いのは、制約が次のようになっclass Individual
ていることです。__init__
pre:
isinstance(chromosomes, list)
post[chromosomes]:
__old__.chromosomes is chromosomes
__old__.chromosomes == chromosomes
post:
hasattr(self, 'chromosomes')
self.chromosomes == chromosomes
私が知る限り、私がPyContract
呼ぶのは好きではありません__old__.self
。これを回避するにはどうすればよいですか?