0

PyContractPyContractsではない)を使用して、クラスメソッドのいくつかの制約を記述しています。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。これを回避するにはどうすればよいですか?

4

1 に答える 1

0

これはそれを修正するようです:

class Individual:
    def append(self, chrom):
        """
            post[self]:
                __old__.self is self
                len(__old__.self.chromosomes)+1 == len(self.chromosomes)
                self.chromosomes[-1] == chrom
        """
        self.chromosomes.append(chrom)

ソース

于 2012-10-23T00:56:32.067 に答える