随机整数生成类

第一种思路:不同的实例生成不同的随机数

import random


class RandomGen:
    def __init__(self, start=1, end=100, count=10):
        self.start = start
        self.end = end
        self.count = count

    def generate(self):
        return [random.randint(self.start, self.end) for _ in range(self.count)]


num = RandomGen()
print(num.generate())

第二种思路:直接构造一个工具类,在类内定义一个工具函数,让这个函数一批一批的生成数据

class RandomGen:  # 工具类,定义一个工具函数,就是一批一批的生成数;以后可以定义很多工具函数
    @classmethod
    def generate(cls, start=1, end=100, count=10):
        return [random.randint(start, end) for _ in range(count)]


num = RandomGen()
print(num.generate())

第三种思路:既然是随机生成数,可不可以考虑使用生成器,惰性的生成数据;另外还可以引入属性装饰器,对私有属性进行访问控制

class RandomGen:
    def __init__(self, start=1, end=100, count=10):  # __init__没有返回值,怎么得到实例的呢?
        # 调用__init__的时候,实例就已经存在了,不是通过__init__返回实例的
        self.start = start
        self.end = end
        self.__count = count
        self._gen = self._generate()  # 结果是生成器对象

    @property
    def count(self):
        return self.__count

    @count.setter
    def count(self, count):
        self.__count = count

    def _generate(self):
        while True:  # 无限的产生数据
            yield random.randint(self.start, self.end)  # 一个一个的产生数据

    def generate(self, count=10):
        c = count if 10 < count < 100 else self.count  # 也可以直接改为self.__count
        # a = self.test()
        return [next(self._gen) for _ in range(c)]  # 对一个生成器对象拨动了self.count下


r = RandomGen()  # 实例化分两步,第一步先实例化,然后再是初始化,初始化时,实例就已经存在了
print(r.generate())
r.count = 5
print(r.generate())

第四种思路是:第三种方法中_generate是一个一个的生成数据,那么可不可以一次直接生成一批数据

class RandomGen:
    def __init__(self, start=1, end=100, count=10):  # __init__没有返回值,怎么得到实例的呢?
        # 调用__init__的时候,实例就已经存在了,不是通过__init__返回实例的
        self.start = start
        self.end = end
        self.__count = count
        self._gen = self._generate()  # 结果是生成器对象

    @property
    def count(self):
        return self.__count

    @count.setter
    def count(self, count):
        self.__count = count

    def _generate(self):
        while True:  # 无限的产生数据
            # 一批一批的产生数据
            yield [random.randint(self.start, self.end) for _ in range(self.count)]

    def generate(self, count=10):
        if count > 0:
            self.__count = count

        return next(self._gen)  # 对一个生成器对象拨动了self.count下


r = RandomGen()  # 实例化分两步,第一步先实例化,然后再是初始化,初始化时,实例就已经存在了
print(r.generate())
# r.count = 5
print(r.generate(3))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值