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)
每个人的年龄总是相同的。我怎样才能解决这个问题?
该行为的原因是属性的默认值被初始化并仅设置一次,因此代码片段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)
有关默认属性的有用信息: