metaclass相关内容

IPython的表现如何?(问号)操作员真的能工作吗?

所以我想,为了在控制台应用程序中实现这样的功能,在函数名的末尾附加一个问号将显示它的文档字符串,我可能会使用类似元类的功能,在定义/导入时,我将复制所有模块成员名称并生成新的名称,仅用于键入文档字符串。 然后我注意到,调用Helper函数并不需要实际的括号,而Python实际上也不允许您在函数名的末尾加一个问号……那么,这是在Python中完成的,还是我只是在浪费时间来解决这个问题? ..
发布时间:2022-06-29 15:22:23 Python

为什么从类和实例中获取属性的查找过程不同?

Python in a Nutshell 描述了获取属性时的查找过程.本书区分了两种情况 从类中获取属性时的查找过程,例如cls.name 从类中获取属性 当您使用语法 C.name 来引用属性时在类对象 C 上,查找分两步进行: 当 name 是 C.__dict__ 中的键时,C.name 获取值 v 来自 C.__dict__['name'] .那么,当 v 是一个描 ..
发布时间:2022-01-13 18:13:47 Python

重写构造函数中调用的方法时,Groovy metaClass 失败?

我只是尝试编写这个简单的代码来测试使用 metaClass 的覆盖方法. 代码在这里: 类你好{公共你好(){富()}公共无效 Foo(){打印“旧"}} 它有一个 Foo() 方法,该方法简单地打印“旧",并由构造函数调用. 这是测试代码: 类 HelloTest {@测试公共无效测试(){布尔方法FooWasCalled = falseHello.metaClass.Foo ..
发布时间:2022-01-08 22:09:08 其他开发

SQLAlchemy 中的动态类创建

我们需要创建 SQLAlchemy 类来访问多个外部数据源,这些数据源的数量会随着时间的推移而增加.我们为核心 ORM 模型使用声明性基础,我知道我们可以使用 autoload=True 手动指定新的 ORM 类来自动生成映射. 问题是我们需要能够动态生成它们,如下所示: from sqlalchemy.ext.declarative import declarative_baseBase ..
发布时间:2021-12-30 14:24:28 Python

重写构造函数中调用的方法时,Groovy 元类失败?

我只是尝试编写这个简单的代码来测试使用元类的覆盖方法. 代码在这里: class 你好{公共你好(){富()}公共无效 Foo(){打印“旧"}} 它有一个 Foo() 方法,它简单地打印“old"并被构造函数调用. 测试代码如下: class HelloTest {@测试公共无效测试(){布尔方法FooWasCalled = falseHello.metaClass.Foo = ..
发布时间:2021-12-23 16:33:26 其他开发

Groovy:this.metaClass 与 instance.metaClass

我在书中遇到过下面的groovy脚本代码.它对我产生了一些奇怪的输出. class Person{定义工作(){println "工作()"}defsports=['篮球','足球','排球']def methodMissing(字符串名称,参数){如果(体育名称){println "将 ${name} 注入 Person 类"人物实例=这个println "this.metaClass:\t\ ..
发布时间:2021-12-23 16:31:17 其他开发

使用装饰器自动注册类方法

我希望能够创建一个 python 装饰器,自动在全局存储库中“注册"类方法(具有一些属性). 示例代码: class my_class(object):@register(prop1,prop2)def my_method( arg1,arg2 ):# 方法代码在这里...@register(prop3,prop4)def my_other_method( arg1,arg2 ):# 方法 ..
发布时间:2021-12-22 09:01:36 Python

如何在定义时自动注册一个类

我想在定义类时注册一个类的实例.理想情况下,下面的代码可以解决问题. 注册表 = {}定义寄存器(cls):registry[cls.__name__] = cls() #问题在这里返回 cls@登记类 MyClass( Base ):def __init__(self):super( MyClass, self ).__init__() 不幸的是,此代码生成错误NameError: glob ..
发布时间:2021-12-22 08:53:58 Python

使用元类的 __call__ 方法而不是 __new__?

在讨论元类时,文档声明: 您当然也可以覆盖其他类方法(或添加新的方法);例如定义一个自定义的 __call__() 方法元类允许在调用类时自定义行为,例如不是总是创建一个新实例. 我的问题是:假设我想在调用类时具有自定义行为,例如缓存而不是创建新对象.我可以通过覆盖类的 __new__ 方法来做到这一点.我什么时候想用 __call__ 来定义元类?这种方法有什么用 __new__ 无 ..
发布时间:2021-12-12 08:30:21 Python

如何以与声明相同的顺序读取类属性?

我正在编写一个读取类属性并将它们存储在列表中的元类,但我希望列表 (cls.columns) 遵守声明顺序(即:mycol2, mycol3、zut、cool、menfin、a 在我的例子中): 导入检查导入打印类列(对象):经过类 ListingMeta(类型):def __new__(meta, classname, bases, classDict):cls = type.__new__( ..
发布时间:2021-12-09 21:13:22 Python

类是 Objective-C 中的对象吗?

好的,所以我明白对象是必须分配和初始化的类的实例,但类本身是对象吗? 我知道当你创建一个新类时,它是其他东西的一个实例,比如 NSObject.那么,如果这使它成为一个类,那么对象不仅可以包含变量和方法,还可以包含其他对象,对吗? 抱歉,这可能真的很基础,但我正在阅读两本关于可可和 xcode 的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验). 解决方案 这里 是 Gr ..
发布时间:2021-12-06 21:06:04 移动开发

Ruby 元类混淆

我知道 ruby​​ 中的所有类都是元类 Class 的实例.而那个“常规"对象是这些类的实例(元类 Class 的实例). 但我一直在想,我的意思是类是对象的根,类本身就是类的实例(称为元类,因为它的实例是类).我在一些博客中看到了 Class 类的方法 new 的一些覆盖. 所以 Class 表现为一个类,但它的实例是类.所以看起来我们有一个圆圈,看起来类Class是它自己的一个实 ..
发布时间:2021-12-03 09:45:05 其他开发

在 Python 中创建单例

这个问题不是讨论单例设计模式是可取的,是一种反模式,或用于任何宗教战争,但要讨论如何以最 Python 化的方式在 Python 中最好地实现这种模式.在这种情况下,我将“最 Pythonic"定义为遵循“最小惊讶原则". 我有多个类会变成单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望用添加的口香糖把几个类弄得杂乱无章. 最佳方法: 方法一:装饰器 ..
发布时间:2021-11-30 23:42:53 Python