将类名存储在类变量中而不输入类名?

2023-11-23

在Python类的实例方法中,我知道我们可以通过以下方式获取类名self.__class__.__name__

但是,我想将类的名称存储在类变量中,而不对类的名称进行编码。

我知道我可以这样做来将类的名称放入类变量中:

class MyClass(object):
  pass
MyClass._myname = MyClass.__name__

但是,我必须对字符串进行编码MyClass在类定义之外两次,只是为了将类名放入类变量中。在这种情况下,那就是"MyClass",我可以简单地编码如下:

class MyClass(object):
  _myname = "MyClass"

但即使这样也是多余的,因为我必须硬编码"MyClass"MyClass class.

我想要的是以某种方式将类的名称放入类变量中,而不需要对类的名称进行编码,如下所示:

class MyClass(object):
  _myname = ???? # where ???? is a statement which returns the class
                 # name, in which the string "MyClass" does not appear

这可能吗?


你可以使用装饰器

>>> def autoname(cls):
...    cls._MyName=cls.__name__
...    return cls
... 
>>> @autoname
... class check:
...    pass
... 
>>> check._MyName
'check'
>>> 

或者,如果您不想硬编码属性的名称:

>>> def autoname2(name):
...     def autoname(cls):
...         setattr(cls, name, cls.__name__)
...         return cls
...     return autoname
...
>>> @autoname2('_StoreHere')
... class check2:
...     pass
... 
>>> check2._StoreHere
'check2'
>>> 

当然,第二种形式可以带更多参数,例如:

>>> def autoname3(name, f=lambda x: x):
...     def autoname(cls):
...         setattr(cls, name, f(cls.__name__))
...         return cls
...     return autoname
...
>>> @autoname3('_MyNameIs', lambda x: x.upper() + '_The_Bold')
... class check3:
...     pass
... 
>>> check3._MyNameIs
'CHECK3_The_Bold'
>>>

关于装饰器与元类的注释:元类非常酷,但是,如果不是严格需要它们,最好避免使用它们,因为臭名昭著元类冲突.

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

将类名存储在类变量中而不输入类名? 的相关文章

  • 翠儿。让流永远运行

    我对 tweepy python 库比较陌生 我想确保我的流 python 脚本始终在远程服务器上运行 因此 如果有人能够分享如何实现这一目标的最佳实践 那就太好了 现在我正在这样做 if name main while True try
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • 如何从 PyCharm 项目中获取我的“exe”[重复]

    这个问题在这里已经有答案了 通过 PyCharm 在 Python 上编写一些项目 我想从中获取一个exe文件 我尝试过 另存为 gt XXX exe 但是 当我尝试执行它时出现错误 此类操作系统不支持该文件 附注 我有win7 x64 它
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • Paramiko - 使用私钥连接 - 不是有效的 OPENSSH 私钥/公钥文件

    我正在尝试找到解决方案 但无法理解我做错了什么 在我的 Linux 服务器上 我运行了以下命令 ssh keygen t rsa 这产生了一个id rsa and id rsa pub file 然后我将它们复制到本地并尝试运行以下代码 s
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 如何限制Django CreateView中ForeignKey字段的选择?

    我有一个沿着这些思路的模型结构 models py class Foo models Model class Bar models Model foo models ForeignKey Foo class Baz models Model
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • select() 可以在 Windows 下使用 Python 中的文件吗?

    我正在尝试在 Windows 下运行以下 python 服务器 An echo server that uses select to handle multiple clients at a time Entering any line o
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • 派生类的指针可以类型转换为其基类的指针吗?

    new 返回的派生类的指针可以进行 类型转换为其基类的指针 这是对还是错 我知道dynamic cast可以用来消除缺点 一般来说 如何将派生类的指针转换为其基类的指针 是的 从指向派生类的指针到指向基类的指针的转换是隐式的 因此 以下内容
  • JUnit - 如何测试具有不同值的方法?

    我有一个方法并希望用不同的值来测试它 我的问题是 如何编写 JUnit 测试来测试具有不同值的相同方法 您可以查看参数化测试 例如example 你也可以使用理论这在很多情况下更方便
  • Android 中使用 Kotlin 的 HTTP 请求

    我想使用 POST 方法进行登录验证并使用 GET 方法获取一些信息 我已经有了我之前项目的 URL 服务器用户名和密码 对于安卓系统 Volley是一个很好的起点 对于所有平台 您可能还想查看ktor客户或http4k这都是很好的图书馆
  • React Admin 显示非常混乱

    我的 RA 项目在本地部署时渲染良好 但是 当我将构建目录复制到 S3 存储桶进行部署时 它渲染得一团糟 有时它会起作用 但大多数时候它会呈现如下图所示 它在使用 AOR 的两种环境中都可以正常工作 环境 React admin版本 2 0
  • 使用 JavaScript 更改浏览器中的 URL,而不加载新页面

    我怎样才能有一个JavaScript可能会对当前页面产生一些影响 但也会更改浏览器中的 URL 的操作 因此如果用户点击重新加载或添加书签 则会使用新的 URL 如果后退按钮能够重新加载原始 URL 那就太好了 我正在尝试在 URL 中记录
  • Pylint 忽略特定名称[重复]

    这个问题在这里已经有答案了 我有 pylint 问题 即有时它会对某些变量 类 模块等重复相同的消息 但我找不到解决方法 我想说的是 pylint 不要使用某些选项或 rcfile 指令检查 此模块 模块 ZZZ 中的 消息 XXX 任何消
  • 有关如何将 SwipeRefreshLayout 与 ListView 结合使用的简单示例

    有人有关于如何将 SwipeRefreshLayout 与 ListView 一起使用的简单示例吗 这是我的情况 我有一个类 SynchDogs 从服务器提取数据 所以该类作为我的适配器的源 我想使用 SwipeRefreshLayout
  • -viewDidLoad 未在子类 UIViewController 中调用

    请耐心等待 我还在学习 Cocoa Touch 其他 viewDidLoad 未被调用问题与我的问题无关 我进行了搜索 I have FooViewController a UIViewController子类 FooViewControl
  • Web API 和 MVC 异常处理

    我们目前正在将 Web 表单系统重新开发为 Web API 和 MVC 这对我们来说是新技术 到目前为止 一切似乎都很好 但是我们正在努力将错误从 Web API 应用程序发送回 MVC 应用程序 我们意识到我们需要捕获任何异常并将这些异常
  • 在 pandas DataFrame/Series 中快速选择时间间隔

    我的问题是我想过滤 DataFrame 以仅包含间隔内的时间 开始 结束 如果不关心这一天 我只想过滤每天的开始和结束时间 我有一个解决方案 但速度很慢 所以我的问题是是否有一种更快的方法来进行基于时间的过滤 Example import
  • TestNG 使用多个 DataProvider 和单个测试方法

    我一直在寻找一种在我的测试方法中使用多个 DataProvider 的方法 我的场景如下 假设我们有一个 DataProvider 类 Test public class ExampleDataProvider Returns the li
  • 通过解释器突变混淆 python 字节码

    事实上 Dropbox 做得非常好 他们能够保护用 python 制作的桌面应用程序 我对此进行了很多研究 但没有比混淆更好的解决方案 这不是很安全的方法 您最终会看到您的代码上传到某个地方 我听了一个会议乔瓦尼 巴霍 PyInstalle
  • 如何实现方法调配?

    我正在尝试使用 SIMBL 修改程序的行为 我没有它的源代码 我使用类转储并发现我需要覆盖实例方法 该方法位于称为控制器的类中 我需要做的就是获取参数 arg1 就这样了 也许 NSLog 或发布通知 我读到了 Objective C 中的
  • 如何设置我的 gradle 最终版本 apk

    早些时候我的 gradle 是这样的 这当然是不正确的 apply plugin android android compileSdkVersion 19 buildToolsVersion 19 0 3 defaultConfig min
  • 如何将函数应用于 MATLAB 中矩阵的每一行/列?

    您可以将函数应用于向量中的每个项目 例如 v 1 或者您可以使用该功能arrayfun 如何在不使用 for 循环的情况下对矩阵的每一行 列执行此操作 许多内置操作 例如sum and prod已经能够跨行或列进行操作 因此您可以重构您正在
  • 如何在Python中处理JSON和Windows路径?

    我正在尝试运行一个 Python 包 它读取 JSON 文件 配置文件 以获取信息 问题是我需要将一些 JSON 文件编辑到包含的目录中 该脚本的创建者使用的是 Linux 内核 因此他使用的是 Linux 路径名 而我使用的是 Windo
  • DISTINCT 仅适用于一列

    假设我有以下查询 SELECT ID Email ProductName ProductModel FROM Products 如何修改它以便它不返回重复的电子邮件 换句话说 当多行包含相同的电子邮件时 我希望结果仅包含其中一行 最好是最后
  • 计算“组特征”,无需 ddply 和 merge

    我想知道是否有比我通常采用的方法更直接的方法来计算某种类型的变量 下面的例子可能最好地解释了这一点 我有一个包含 2 列的数据框 水果以及水果是否腐烂 我想为每一行添加例如同一类别的水果腐烂的百分比 例如 有 4 个苹果条目 其中 2 个已
  • 如何让 ArrayList 和 Scanner 配合得很好?

    import java util public class CyclicShiftApp public static void main String args Scanner scan new Scanner System in Arra
  • 将类名存储在类变量中而不输入类名?

    在Python类的实例方法中 我知道我们可以通过以下方式获取类名self class name 但是 我想将类的名称存储在类变量中 而不对类的名称进行编码 我知道我可以这样做来将类的名称放入类变量中 class MyClass object