为类属性生成随机数

2023-12-27

我有以下代码:

from numpy import random

class Person():

    def __init__(self, name, age=random.randint(18,65)):
        self.name = name
        self.age = age

我希望年龄是 18 到 65 之间的随机数,除非明确指定。但是,当我创建此类的不同实例时,如下所示:

p1 = Person('Bob')
p2 = Person('Sue')
p3 = Person('Jeff')

每个人的年龄总是相同的。我怎样才能解决这个问题?


该行为的原因是属性的默认值被初始化并仅设置一次,因此代码片段random.randint(18,65)将被执行并设置为年龄的默认值,这就是如果未提供年龄则具有相同的年龄默认值的原因。

解决问题将默认值设置为 None 并根据需要执行检查和分配随机值:

from numpy import random


class Person():

    def __init__(self, name, age=None):
        if age is None:
            age = random.randint(18,65)
        self.name = name
        self.age = age

有关默认属性的有用信息:

  • 可变默认参数 http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为类属性生成随机数 的相关文章

随机推荐