0
私は、それぞれのseed
のための同じ値で、構図によって、含まれてクラスを定義するfaker.Faker()とrandom.Random()のインスタンスをしようとしている。そのように次のスクリプトを実行すると、__init__でsetterメソッドを繰り返さずにプロパティを定義する方法は?
if __name__ == "__main__":
d1 = DistanceRule(seed=5)
print d1.random.randint(1, 10), d1.fake.name()
d2 = DistanceRule(seed=12)
d2.seed = 5
print d2.random.randint(1, 10), d2.fake.name()
import faker
import random
class DistanceRule(object):
def __init__(self, seed=None):
self.fake = faker.Faker()
self.random = random.Random()
self._seed = seed
self.seed_fake_and_random()
@property
def seed(self):
return self._seed
@seed.setter
def seed(self, seed):
self._seed = seed
self.seed_fake_and_random()
def seed_fake_and_random(self):
"""Seed the instance's faker.Faker() and random.Random() with a
single seed value.
"""
self.fake.seed(self._seed)
self.random.seed(self._seed)
は
7 Natalie Pope
7 Natalie Pope
これは望ましい動作をキャプチャし、名前を生成しますこの場合、seed
プロパティを設定すると、インスタンスのランダムデータジェネレータも再シードされます。唯一のことは、__init__
とのコードの繰り返しがあることです。これを行うにはDRY方法がありますか?
なぜ '' __init__' @ seed.setter'メソッドを呼び出すことはありませんか? –