[英]How to define a property without repeating the setter method in the __init__?
我正在尝试定义一个类,该类通过组合包括一个faker.Faker()和random.Random()实例,它们的各自seed
s具有相同的值:
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
属性也重新种子了实例的随机数据生成器。 唯一令我@seed.setter
是__init__
和@seed.setter
方法中存在代码重复。 还有更干的方法吗?
由于您重新定义了setter,因此可以在实例初始化时调用它:
def __init__(self, seed=None):
self.fake = faker.Faker()
self.random = random.Random()
self.seed = seed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.