__getattr__ 用于静态/类变量

2023-11-27

我有一堂课,比如:

class MyClass:
     Foo = 1
     Bar = 2

每当MyClass.Foo or MyClass.Bar被调用时,我需要在返回值之前调用一个自定义方法。在Python中可以吗?我知道如果我创建该类的实例并且可以定义自己的实例,这是可能的__getattr__方法。但我的场景涉及使用此类而不创建它的任何实例。

我还需要定制__str__方法被调用时str(MyClass.Foo)被调用。 Python 提供这样的选项吗?


__getattr__() and __str__()一个对象的属性是在它的类上找到的,所以如果你想为一个类定制这些东西,你需要类的类。一个元类。

class FooType(type):
    def _foo_func(cls):
        return 'foo!'

    def _bar_func(cls):
        return 'bar!'

    def __getattr__(cls, key):
        if key == 'Foo':
            return cls._foo_func()
        elif key == 'Bar':
            return cls._bar_func()
        raise AttributeError(key)

    def __str__(cls):
        return 'custom str for %s' % (cls.__name__,)

class MyClass(metaclass=FooType):
    pass

# # in python 2:
# class MyClass:
#    __metaclass__ = FooType


print(MyClass.Foo)
print(MyClass.Bar)
print(str(MyClass))

印刷:

foo!
bar!
custom str for MyClass

不,对象无法拦截对其属性之一进行字符串化的请求。为属性返回的对象必须定义自己的__str__()行为。

Updated2023-02-20 Python 3.x 默认实现(Python 2 作为注释)。

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

__getattr__ 用于静态/类变量 的相关文章

随机推荐

  • 如果安装了SQL Server(标准版),如何通过代码获取服务器名称

    如果安装了SQL Server 标准版 如何通过代码获取服务器名称 我们在创建连接字符串来连接 SQL Server 时传递服务器名称 我们可以通过代码检索这个值吗 string sqlConnectionString string For
  • 如何使用 python 将 xml 文件转换为 JSON?

    我有一个 XML 文件 我想使用 python 将其转换为 JSON 文件 但它对我来说不起作用
  • 使用C#显示powerpoint

    有什么好方法使用 C 编写的 Windows 应用程序来显示 控制 powerpoint 幻灯片吗 最终 我想在表单中显示缩略图 然后单击这些缩略图将推进第二个显示器上显示的幻灯片 类似于使用 Powerpoint 本身在第二个显示器上显示
  • 3G iPhone 设备“已完成运行”,但应用程序无法加载

    我正在尝试在 3G 设备上运行应用程序 Xcode 表示该应用程序已 已完成在 iPhone 上的运行 但该应用程序不会部署 我认为我的架构配置正确 见下图 任何帮助都会很棒 thanks 我终于明白了这一点 在 Info plist 中
  • SwiftUI NavigationLink 按钮是灰色且不可触摸的

    我无法得到NavigationLink在 SwiftUI 中 该按钮是可见的 但不幸的是它是灰色的并且无法单击 这是代码 import SwiftUI import Combine struct ContentView View var b
  • 如何在flutter中截取屏幕之外的小部件的屏幕截图?

    我在用重画边界截取当前小部件的屏幕截图listView 但它只捕获当时屏幕上可见的内容 RepaintBoundary key src child ListView padding EdgeInsets only left 10 0 scr
  • 如何使用 Bootstrap 4 对列重新排序?

    我在 bootstrap 4 中使用了以下标签 div class container div class row align items center div class col md 3 div class right user acc
  • 从 Array 到 setValues 给出:“无法转换为。”

    背景 我想更改时间表的周格式 每行显示 7 天 只有 yyww 中的周 例如 1225 没有可用日期 在另一张表中 一列列出周 另一列列出日期 方法 我将这两张纸放入两个数组中 将第三个数组打包 将其值设置到第三张纸中 问题 该行给出错误消
  • 如何使用R中的聚合函数计算数据框中的平均值?

    我有一个数据框 df1 number c 4 3 2 3 4 1 year c 2000 2000 2000 2015 2015 2015 items c 12 10 15 5 10 7 df1 data frame number year
  • 有没有办法使 @section 与 asp.net mvc Razor ViewEngine 成为可选?

    我有一个类似于以下内容的 Page cshtml 不起作用 Layout Shared Layouts Layout cshtml var mycollection ViewBag TheCollection as IQueryable
  • 重新编译反编译的包含 goto 指令的 Java (JD / JAD) 源

    相关问题 支持 goto 的 Java 编译器或 JVM 语言 我已经反编译了一个 jar 合法地 用于调试目的 并想要重新编译它 我都用过JAD and JD由于 goto 指令 两者都无法编译 E g goto L1 L1 return
  • 重写 symfony2 上的表单验证消息

    如何覆盖 symfony2 中的表单验证消息 虽然有一个validation xml文件相关的模型类 我认为它验证基于 html5 的表单 请符合要求的格式 请填写此字段 有什么方法可以覆盖此验证消息 请在这方面帮助我 我被困了一天多了 因
  • 如何在 jQuery 中使用 css font-weight 属性对文本进行动画处理?正常到粗体

    我正在尝试像不透明效果一样的动画 它会慢慢地将文本变粗 平常试过animate 方法但没有成功 搜索过但找不到任何示例 是否有可能做到这一点 js小提琴 jQuery var Text h1 Text click function Text
  • React Leaflet V3 自定义控件

    有一个新的 React leaflet 版本即将推出 可以在这里找到 npm 安装react leaflet next 文档 https react leaflet v3 now sh docs start introduction 这是使
  • 如何在 Java 应用程序日历中设置一周的第一天

    我们使用一个java应用程序 它有一个日期选择字段 当您单击那里时 会打开一个小日历 那里一周的第一天是星期日 但我希望是星期一 我尝试从 Windows 控制面板的日期设置中更改它 例如 我将 Windows 日历的第一天设置为星期四 但
  • 将 BigInteger 存储到 Mysql 中

    由于数学限制 我必须使用 BigInteger 类来表示值 经过一些计算后 我想将结果 由 2x BigInteger 实例给出 存储到 Mysql 中 存储此类对象的最佳数据类型是什么 我正在考虑使用 Blob 来存储这些结果的二进制格式
  • 如何调试 React Native?

    当应用程序在应用程序模拟器中运行时 如何使用 React Native 调试其 React 代码 Mac Cmd M Windows and Linux Ctrl M 在模拟器中使用上面适当的热键 它将弹出 Chrome 您可以从那里使用开
  • erlang 记录进程何时启动吗?

    我正在监视 Erlang 应用程序 目前正在尝试确定特定 PID 运行了多长时间 绝对时间戳或持续时间对我有用 但我在 process info 中或通过 sys 模块看不到这些数据位 有没有办法从 Erlang VM 中获取这些信息 我可
  • 将参数传递给 TADOStoredProc 的更好方法 (Delphi)

    我需要将大量的 SQL 查询转换为存储过程 我有一些代码可以在一个 Delphi 过程中一次更新大约 20 或 30 个值 我可以创建一个存储过程来完成这样的事情 问题是我将参数传递给存储过程的方法非常庞大 如下所示 with stored
  • __getattr__ 用于静态/类变量

    我有一堂课 比如 class MyClass Foo 1 Bar 2 每当MyClass Foo or MyClass Bar被调用时 我需要在返回值之前调用一个自定义方法 在Python中可以吗 我知道如果我创建该类的实例并且可以定义自己