数据类中的属性

2024-03-25

描述


我正在尝试实现一个仅包含几个参数的简单数据类。

@dataclass
class ReconstructionParameters:

    img_size: int
    CR: int
    denoise: bool
    epochs: int
    learning_rate: float
    step_size: int
    gamma: float
    batch_size: int
    regularization: float
    N0: float
    sig: float

    arch_name: InitVar[str]

    net_arch: int = field(init=False)


    def __post_init__(self, arch_name):
        self.net_arch = arch_name

    @property
    def net_arch(self):
        return str(netType(self.net_arch))

    @net_arch.setter
    def net_arch(self, arch_name):
        self.net_arch = int(netType[arch_name])
    

用户应该能够传递包含字符串的字符串arch_name在类的初始化期间,但类应保留以下定义的等效整数IntEnum:

class netType(IntEnum):
    
    c0mp = 0
    comp = 1
    pinv = 2
    free = 3

但是,如果用户想要获取先前创建的类中包含的 net_arch,他们应该有权访问用于初始化的相同字符串,而不是整数表示形式。我正在尝试使用@property装饰器和一个setter。理想情况下,我想使用__post_init__()初始化方法net_arch使用其设置器。

Error


运行以下代码时出现错误:

a = ReconstructionParameters(
    img_size=64, 
    CR=1024,
    denoise=True,
    epochs=20, 
    learning_rate=1e-6,
    step_size=10,
    gamma=1e-7,
    batch_size=256,
    regularization=1e-6, 
    N0=2500,
    sig=0.5,
    arch_name='c0mp')
Traceback (most recent call last):

  File "C:\spas\Programs\Python\test.py", line 51, in <module>
    a = ReconstructionParameters(

  File "<string>", line 14, in __init__

  File "C:\spas\Programs\Python\test.py", line 48, in net_arch
    self.net_arch = int(netType[arch_name])

  File "C:\Users\user\Anaconda3\envs\singlepixelenv\lib\enum.py", line 349, in __getitem__
    return cls._member_map_[name]

KeyError: <property object at 0x000001CF7C26BA40>

数据类字段和属性不能具有相同的名称。但是您可以在该字段中添加前导下划线,然后该属性将起作用。

from dataclasses import InitVar, dataclass, field
from enum import IntEnum


@dataclass
class ReconstructionParameters:
    img_size: int
    CR: int
    denoise: bool
    epochs: int
    learning_rate: float
    step_size: int
    gamma: float
    batch_size: int
    regularization: float
    N0: float
    sig: float

    arch_name: InitVar[str]

    _net_arch: int = field(init=False)

    def __post_init__(self, arch_name):
        self.net_arch = arch_name

    @property
    def net_arch(self):
        return str(netType(self._net_arch))

    @net_arch.setter
    def net_arch(self, arch_name):
        self._net_arch = int(netType[arch_name])


class netType(IntEnum):
    c0mp = 0
    comp = 1
    pinv = 2
    free = 3


a = ReconstructionParameters(
    img_size=64,
    CR=1024,
    denoise=True,
    epochs=20,
    learning_rate=1e-6,
    step_size=10,
    gamma=1e-7,
    batch_size=256,
    regularization=1e-6,
    N0=2500,
    sig=0.5,
    arch_name='c0mp')

print(a)
# ReconstructionParameters(img_size=64, CR=1024, denoise=True, epochs=20, learning_rate=1e-06, step_size=10, gamma=1e-07, batch_size=256, regularization=1e-06, N0=2500, sig=0.5, _net_arch=0)
print(a.net_arch)
# netType.c0mp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据类中的属性 的相关文章

随机推荐

  • xna 防止下坡或上太陡的山

    如何防止在高度图地形上过于陡峭的斜坡或上山 我有一个可以在地形上移动的 3D 相机 它现在可以在任何地方移动 甚至在大斜坡和太陡的山丘上 我该怎么办 如果你试图朝一个方向移动 你应该预测你最终会到达哪里 然后弄清楚是否slope http
  • 检测拨出电话是否已接听

    Once ACTION NEW OUTGOING CALL已广播 我需要捕获对方回答的以下事件 您能否建议如何实现这一目标 我知道这是可能的 因为 Android 拨号器应用程序会在接听电话时将绿色 Android 图标更改为该人的照片 更
  • 能否以编程方式更改 ASP.NET 中的会话超时?

    可以吗 还是只能在IIS上配置 您通常编辑 Global asax 文件的 Session Start 方法并设置会话超时 http msdn microsoft com en us library system web sessionst
  • Hibernate 更新表架构

    我正在使用休眠3 我想将表的一列长度从 255 更新为 512 表已经有数据了 我尝试过 hbm2ddl auto update 但出现如下错误 错误 JDBCExceptionReporter 字符串或二进制数据将被截断 2011 年 5
  • Java中的信号处理库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想计算时间序列的功率谱密度 进行一些带通 低通和高通滤波 也许还有其他一些基本的东西 有没有一个不错的开源 Java 库可以做到这一点
  • COCOA 中的 PDF 到 JPG 转换

    在我的 cocoa 应用程序中 我需要将 pdf 的每一页保存为 jpg 我如何继续使用 Objective C Using pure Objective C Cocoa and PDF Kit http developer apple c
  • jQuery:如何全局获取整个文档正文中我悬停的最里面的 dom 元素?

    我想检测鼠标在整个文档主体上的移动 并能够准确地判断我将鼠标悬停在 DOM 的哪一部分上 我所说的 哪一部分 是指鼠标当前位于最里面的 DOM 元素 我可以将悬停绑定到整个文档正文 但是 this 会给我 body 而不是最里面的元素 或者
  • Python,美汤,获取所有类名

    给定一个 html 代码可以说 div class class1 span class class2 some text span span class class3 some text span span class class4 som
  • 警告使用函数指针的结构内部的匿名命名空间

    在我的程序中 Put this code in a separate header file struct S1 typedef struct int unused RETVAL typedef RETVAL MyFunc void res
  • 检查文件是否存在而不创建它

    如果我这样做 File f new File c text txt if f exists System out println File exists else System out println File not found 然后文件
  • python:更改符号变量并分配数值

    为了计算导数和其他表达式 我使用了 sympy 包并表示T sy Symbol T 现在我已经计算出正确的表达式 E T 2 F deriv T T rho where def F deriv rho T rho ret 0 for n i
  • 如何将VueJS中的属性对象传递给组件来修改它?

    将 VueJS 中的属性对象传递给组件并在那里修改它的最佳实践是什么 例如 人员表 姓名 名字 年龄 性别等 单击某个条目后 会弹出一个对话框 您可以在其中修改该条目 如果我通过 props 将条目传递给组件并修改它 我会收到 错误消息 避
  • D3.js:饼图,仅向外部区域添加边框

    我在 D3 中得到了一个饼图 并用笔画分隔了每个切片 但是 我想仅向切片的外部区域添加边框 而不是在连续线上添加边框 而是尊重原始切片中的笔划创建的间隙 请参阅我的图片以进行澄清 关于如何做到这一点有什么想法吗 See http jsfid
  • npm更新成功,但仍然显示旧版本

    当我做一个npm v我发现我仍然使用 5 6 0 并不断收到执行操作的提示npm i npm 但我已经做了一个sudo npm install npm latest g并用 a 进行双重检查npm outdated g depth 0看到我
  • MySQL命名约定,字段名应该包含表名吗?

    有朋友告诉我 我应该在同一个表的字段名中包含表名 我想知道为什么 而且应该是这样吗 例子 Table Users Fields user id username password last login time 我发现前缀 user 毫无意
  • “范围的坐标或尺寸无效”

    我正在开发一个与 REST API 链接并将数据放入 Google 表格的 Google Apps 脚本 我已经成功完成一次此操作 但是在访问一些不同的数据时 我收到错误消息 范围的坐标或尺寸无效 当它们在我的其他脚本上完美运行时 访问的所
  • 假设不变的 ASCII 编码,用 Rubyist 方法解码该编码字符串

    我的程序是二进制协议的解码器 该二进制协议中的字段之一是编码的String 中的每个角色String是可打印的 并且代表一个整数值 根据我正在解码的协议的规范 它表示的整数值取自下表 其中列出了所有可能的字符 Character Value
  • 依赖项的 Maven 项目变量

    我有一个加载小程序的 html 文件 html需要通过名称引用jar 并且由于maven根据artifactid 版本等对其进行命名 因此html需要随着项目的发展动态更新 似乎资源过滤是可行的方法 但我无法弄清楚要插入的变量应该是什么样子
  • jQuery 动画小数递增/递减

    我想一步一步地动画两个十进制数之间的差异 已经发现乔斯 克劳克罗夫特的解决方案 http www josscrowcroft com 2011 code jquery animate increment decrement numeric
  • 数据类中的属性

    描述 我正在尝试实现一个仅包含几个参数的简单数据类 dataclass class ReconstructionParameters img size int CR int denoise bool epochs int learning