当前位置: 首页 > 面试题库 >

元类的一些(具体)用例是什么?

戈巴英
2023-03-14
问题内容

我有一个喜欢使用元类的朋友,并定期提供它们作为解决方案。

我认为您几乎不需要使用元类。为什么?因为我认为如果您正在对类进行此类操作,则可能应该对对象进行操作。并进行了少量的重新设计/重构。

能够使用元类已经使很多地方的许多人将类用作某种第二流的对象,这对我来说似乎是灾难性的。用元编程代替编程吗?不幸的是,添加了类装饰器后,它甚至被接受了。

所以,我很想知道您在Python中对元类的有效(具体)用例。还是要启蒙一下,为什么有时候变异类比变异对象更好。

我将开始:

有时在使用第三方库时,能够以某种方式对类进行更改很有用。

(这是我能想到的唯一情况,并不具体)


问题答案:

我有一个处理非交互式绘图的类,作为Matplotlib的前端。但是,有时需要进行交互式绘图。仅使用几个函数,我发现我能够增加图形数量,手动调用绘制等,但是我需要在每次绘制html" target="_blank">调用之前和之后执行这些操作。因此,要创建交互式绘图包装器和屏幕外绘图包装器,我发现通过元类包装适当的方法来执行此操作比执行以下操作更有效:

class PlottingInteractive:
    add_slice = wrap_pylab_newplot(add_slice)

这种方法不能跟上API的更改等等,但是__init__在重新设置类属性之前对类属性进行迭代的一种方法效率更高,并且可以保持最新状态:

class _Interactify(type):
    def __init__(cls, name, bases, d):
        super(_Interactify, cls).__init__(name, bases, d)
        for base in bases:
            for attrname in dir(base):
                if attrname in d: continue # If overridden, don't reset
                attr = getattr(cls, attrname)
                if type(attr) == types.MethodType:
                    if attrname.startswith("add_"):
                        setattr(cls, attrname, wrap_pylab_newplot(attr))
                    elif attrname.startswith("set_"):
                        setattr(cls, attrname, wrap_pylab_show(attr))

当然,也许有更好的方法可以做到这一点,但是我发现这是有效的。当然,这也可以在__new__或中完成__init__,但这是我发现最直接的解决方案。



 类似资料:
  • 问题内容: 我有一个喜欢使用元类的朋友,并定期提供它们作为解决方案。 我认为您几乎不需要使用元类。为什么?因为我认为如果您正在对类进行此类操作,则可能应该对对象进行操作。并进行了少量的重新设计/重构。 能够使用元类已经使很多地方的许多人将类用作某种第二流的对象,这对我来说似乎是灾难性的。用元编程替代编程吗?不幸的是,添加了类装饰器使它变得更加可以接受。 所以,我很想知道您在Python中对元类的有

  • 这听起来可能是一个愚蠢的问题,但我不明白“用户详细信息”类中的“isEnable”是用来做什么的。留档说“指示用户是启用还是禁用。禁用的用户无法进行身份验证。”所以,我唯一真正需要这个布尔值的是,禁用某些用户的身份验证?因为我有一个数据库,在教程中,那个人做了一个额外的列来保存该布尔值。但是为什么我需要将该值保存在数据库中呢?为什么我要决定禁用其中一个用户的身份验证?那么删除用户的帐户不是更明智吗

  • 如果让我们假设我用@component(首先忽略@repository、@service等更具体的注释)声明我的所有bean,并确保包被@componentscan注释扫描,那么我仍然用@configuration和@componentscan注释我的类的具体用例是什么? 我之所以问这个问题,是因为有时我会看到同时用@configuration和@componentscan注释的类。

  • 本文向大家介绍Java中StringUtils工具类的一些用法实例,包括了Java中StringUtils工具类的一些用法实例的使用技巧和注意事项,需要的朋友参考一下 StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 Null

  • 通过上面的介绍,终于模模糊糊的带到元类这里来了。可是我们到现在还不知道元类是什么鬼东西。 我们创建类的时候,大多数是为了创建类的实例对象。 那么元类呢? 元类就是用来创建类的。也可以换个理解方式就是:元类就是类的类。 通过上面 type() 函数的介绍,我们知道可以通过 type() 函数创建类: MyClass = type('MyClass', (), {}) 实际上 type() 函数是一

  • 本文向大家介绍什么是空元素?常用的空元素有哪些?相关面试题,主要包含被问及什么是空元素?常用的空元素有哪些?时的应答技巧和注意事项,需要的朋友参考一下 没有闭合标签的元素是空元素