为类属性生成随机数

Dan*_*Dan 4 python random numpy python-3.x

我有以下代码:

from numpy import random

class Person():

    def __init__(self, name, age=random.randint(18,65)):
        self.name = name
        self.age = age
Run Code Online (Sandbox Code Playgroud)

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

p1 = Person('Bob')
p2 = Person('Sue')
p3 = Person('Jeff')
Run Code Online (Sandbox Code Playgroud)

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

And*_*yko 7

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

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

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
Run Code Online (Sandbox Code Playgroud)

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