为类属性生成随机数

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(使用前将#替换为@)

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

  • PyTorch 如何计算二阶雅可比行列式?

    我有一个正在计算向量的神经网络u 我想计算关于输入的一阶和二阶雅可比矩阵x 单个元素 有人知道如何在 PyTorch 中做到这一点吗 下面是我项目中的代码片段 import torch import torch nn as nn class
  • Python正则表达式查找所有单个字母字符

    我想找到字符串中单个字母字符每次出现的所有索引 我不想捕获单个字符 html 代码 这是我的代码 import re s fish oil B stack peanut c b words re finditer S s has alpha
  • 加快 pandas groupby 中的滚动总和计算

    我想按组计算大量组的滚动总和 但我很难快速地完成它 Pandas 内置了滚动和展开计算器的方法 这是一个例子 import pandas as pd import numpy as np obs per g 20 g 10000 obs g
  • Django - 403 Forbidden CSRF 验证失败

    我在 Django 中为我的网站提供了一个联系表单 当我在本地测试它时 它工作正常 但现在当我尝试 实时 提交我的联系表单时 它总是出现 403 禁止 CSRF 验证失败 view def contact request if reques
  • 为什么del是Python中的指令而不是方法? [复制]

    这个问题在这里已经有答案了 为什么Python的创建者更喜欢这种语法 指令 del list index 超过这个 方法 list del index 在我看来 这del属于同一 类别 append remove find ETC 因此应该
  • Panda如何将行分组到不同的时间桶中?

    我有一个带有名为时间戳的日期时间类型列的数据帧 我想根据时间部分的时间戳将数据帧拆分为多个数据帧 每个数据帧包含按其值模 x 分钟进行值的行 其中 x 是变量 请注意e and f不按原来的顺序 以 10 分钟为模 我希望所有时间都以3在一
  • 测试 python 列表的所有元素是否为 False

    如何返回False如果所有元素都在列表中False 给定的列表是 data False False False Using any https docs python org 2 library functions html any gt
  • 忽略 NaN 的列表理解

    我正在尝试构建一个列表理解 其条件是不导入 nan 值 但运气不佳 以下是当前代码以及结果输出 什么条件会将 nan 从列表中删除 def generate labels filtered df columnName return labe
  • Django:在管理界面中显示多对多项目的列表

    这可能是一个简单的问题 但我似乎无法理解 我在 models py 中有两个简单的模型 Service 和 Host Host services 与 Service 具有 m2m 关系 换句话说 一台主机有多个服务 一个服务可以驻留在多个主
  • lxml 属性需要完整的命名空间

    下面的代码使用 lxml python 3 3 从 Excel 2003 XML 工作簿中读取表格 该代码工作正常 但是为了通过 get 方法访问 Data 元素的 Type 属性 我需要使用键 urn schemas microsoft
  • rpy2 传递 python 保留关键字参数

    我试图通过 python 使用 r 的密度函数 并且必须将 from to 参数传递给密度函数 然而 由于 from 这个词是Python中的保留关键字 我该如何实现这一点呢 谢谢 这是到目前为止的代码 r density robjects
  • 使用 Python 访问 MP3 音乐数据

    我正在尝试编写一个 Python 脚本 用于使用歌曲的数据作为比较的基础来搜索重复的 mp3 4 文件 我的情况涉及许多文件名相似但 ID3 标签不同的 mp3 4 文件 起初 我尝试循环并使用 md5 来查找重复文件 忽略文件名 当然 当
  • 在 python 中以半小时为增量创建选择列表

    我正在尝试创建一个
  • 从 DST 感知日期时间对象在 Dataframe 中创建 pandas DatetimeIndex

    我从在线 API 收集了一系列数据点 每个数据点都有一个值和一个 ISO 时间戳 不幸的是我需要循环它们 所以我将它们存储在临时的dict然后从中创建一个 pandas 数据帧并将索引设置为时间戳列 简化示例 from datetime i
  • 从 Python 调试 C 库 (ctypes)

    我有一个使用 ctypes 和 C 共享库 dll 文件 的 Python 程序 作为 IDE 我使用 Eclipse 其中将开发两个项目 C 共享库和使用它的 python 程序 我的想法是 当我在调试模式下启动Python程序时 我可以
  • 在 C++ 中运行 python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用 C 编写的应用程序和一个测试系统 也是用 C 编写的 测试系统非常复杂并且很难改变 我只想做一些小的改变 我的班级是这样的
  • 如何为 matplotlib 中已绘制的线设置标签?

    在我的代码中我已经执行了 ax plot x y b 并且需要能够在事后设置相应行的标签 以达到与我相同的效果 ax plot x y b label lbl 有没有办法在 Matplotlib 中做到这一点 如果你抓住了line2D创建对
  • 合法 .xlsx 文件上的 openpyxl load_workbook() 会导致 zipfile.BadZipFile 错误

    我试图做的是将数据帧数据附加到现有的合法 Excel 文件中 我使用了 openpyxl 中的 load workbook 函数 但它系统地返回错误 这是一些在我的机器上崩溃的代码 from openpyxl import load wor
  • 为文件中的每个单词创建字典并计算其后面的单词的频率

    我正在尝试解决一个难题 却迷失了方向 这就是我应该做的 INPUT file OUTPUT dictionary Return a dictionary whose keys are all the words in the file br
  • Django MySQL 创建表时出错

    我有一个类似的问题这张票 https code djangoproject com ticket 18256在 Django 论坛上提出 我该如何解决这个问题 我还扩展了一个用户模型 如下所示 class Profile models Mo

随机推荐