0
我试图定义一个类,其中包括,通过组合物中,faker.Faker()一个实例,并random.Random()具有相同值的为各自seed
S:如何在不重复__init__中的setter方法的情况下定义属性?
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)
使得运行下面的脚本
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()
产生
7 Natalie Pope
7 Natalie Pope
这捕捉所期望的行为,名称当然,设置seed
属性也会重新实现实例的随机数据生成器。唯一令我感到厌烦的是在__init__
和@seed.setter
方法中存在代码重复。有没有更干的方式来做到这一点?
为什么'__init__'不叫'@ seed.setter'方法? –