metaclass相关内容
我认为代码可以比文字更好地解释这个问题。以下是my_abc.py: 中的代码 from abc import ABCMeta, abstractmethod class MyABC(object): __metaclass__ = ABCMeta @abstractmethod def print(self): pass 以下是my_class.
..
所以我想,为了在控制台应用程序中实现这样的功能,在函数名的末尾附加一个问号将显示它的文档字符串,我可能会使用类似元类的功能,在定义/导入时,我将复制所有模块成员名称并生成新的名称,仅用于键入文档字符串。 然后我注意到,调用Helper函数并不需要实际的括号,而Python实际上也不允许您在函数名的末尾加一个问号……那么,这是在Python中完成的,还是我只是在浪费时间来解决这个问题?
..
我正在编写一个与DataSet交互的包,代码类似 from abc import ABC, ABCMeta, abstractmethod from functools import cache from pathlib import Path from warnings import warn class DatasetMetaClass(ABCMeta): r"""Meta
..
在我的Python项目中,我像这样扩展scipy.stats.rv_continuous: class GenlogisticGen(LmomDistrMixin, scipy.stats.rv_continuous): ... 我正尝试在Read the Docs上生成文档,但遇到生成错误: class GenlogisticGen(LmomDistrMixin, sci
..
Python in a Nutshell 描述了获取属性时的查找过程.本书区分了两种情况 从类中获取属性时的查找过程,例如cls.name 从类中获取属性 当您使用语法 C.name 来引用属性时在类对象 C 上,查找分两步进行: 当 name 是 C.__dict__ 中的键时,C.name 获取值 v 来自 C.__dict__['name'] .那么,当 v 是一个描
..
我曾尝试使用 sip 包装器类型的 abc.ABCMeta,它在使用 abc.ABC 进行子类化时效果很好. 类 QABCMeta(wrappertype, ABCMeta):经过类 WidgetBase(QWidget, metaclass=QABCMeta):...类接口小部件(WidgetBase,ABC):...类 MainWidget(InterfaceWidget):... 但它不
..
我只是尝试编写这个简单的代码来测试使用 metaClass 的覆盖方法. 代码在这里: 类你好{公共你好(){富()}公共无效 Foo(){打印“旧"}} 它有一个 Foo() 方法,该方法简单地打印“旧",并由构造函数调用. 这是测试代码: 类 HelloTest {@测试公共无效测试(){布尔方法FooWasCalled = falseHello.metaClass.Foo
..
我们需要创建 SQLAlchemy 类来访问多个外部数据源,这些数据源的数量会随着时间的推移而增加.我们为核心 ORM 模型使用声明性基础,我知道我们可以使用 autoload=True 手动指定新的 ORM 类来自动生成映射. 问题是我们需要能够动态生成它们,如下所示: from sqlalchemy.ext.declarative import declarative_baseBase
..
我有一个简单的 Groovy 类别类,它向 String 实例添加方法: final class SampleCategory {静态字符串 withBraces(String self) {“($self)"}} 我想在我的单元测试中使用这个类别(例如).它看起来像这样: class MyTest {@测试void shouldDoThis() {使用(样本类别){断言 'this'.wi
..
我只是尝试编写这个简单的代码来测试使用元类的覆盖方法. 代码在这里: class 你好{公共你好(){富()}公共无效 Foo(){打印“旧"}} 它有一个 Foo() 方法,它简单地打印“old"并被构造函数调用. 测试代码如下: class HelloTest {@测试公共无效测试(){布尔方法FooWasCalled = falseHello.metaClass.Foo =
..
我在书中遇到过下面的groovy脚本代码.它对我产生了一些奇怪的输出. class Person{定义工作(){println "工作()"}defsports=['篮球','足球','排球']def methodMissing(字符串名称,参数){如果(体育名称){println "将 ${name} 注入 Person 类"人物实例=这个println "this.metaClass:\t\
..
我希望能够创建一个 python 装饰器,自动在全局存储库中“注册"类方法(具有一些属性). 示例代码: class my_class(object):@register(prop1,prop2)def my_method( arg1,arg2 ):# 方法代码在这里...@register(prop3,prop4)def my_other_method( arg1,arg2 ):# 方法
..
我想在定义类时注册一个类的实例.理想情况下,下面的代码可以解决问题. 注册表 = {}定义寄存器(cls):registry[cls.__name__] = cls() #问题在这里返回 cls@登记类 MyClass( Base ):def __init__(self):super( MyClass, self ).__init__() 不幸的是,此代码生成错误NameError: glob
..
我今天早些时候尝试将 threading.Condition 子类化,但没有成功.这是我尝试子类化 threading.Condition 类时 Python 解释器的输出: >>>进口螺纹>>>类 ThisWontWork(threading.Condition):... 经过...回溯(最近一次调用最后一次):文件“",第 1 行,在 中TypeError:调
..
在讨论元类时,文档声明: 您当然也可以覆盖其他类方法(或添加新的方法);例如定义一个自定义的 __call__() 方法元类允许在调用类时自定义行为,例如不是总是创建一个新实例. 我的问题是:假设我想在调用类时具有自定义行为,例如缓存而不是创建新对象.我可以通过覆盖类的 __new__ 方法来做到这一点.我什么时候想用 __call__ 来定义元类?这种方法有什么用 __new__ 无
..
我正在编写一个读取类属性并将它们存储在列表中的元类,但我希望列表 (cls.columns) 遵守声明顺序(即:mycol2, mycol3、zut、cool、menfin、a 在我的例子中): 导入检查导入打印类列(对象):经过类 ListingMeta(类型):def __new__(meta, classname, bases, classDict):cls = type.__new__(
..
好的,所以我明白对象是必须分配和初始化的类的实例,但类本身是对象吗? 我知道当你创建一个新类时,它是其他东西的一个实例,比如 NSObject.那么,如果这使它成为一个类,那么对象不仅可以包含变量和方法,还可以包含其他对象,对吗? 抱歉,这可能真的很基础,但我正在阅读两本关于可可和 xcode 的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验). 解决方案 这里 是 Gr
..
我知道 ruby 中的所有类都是元类 Class 的实例.而那个“常规"对象是这些类的实例(元类 Class 的实例). 但我一直在想,我的意思是类是对象的根,类本身就是类的实例(称为元类,因为它的实例是类).我在一些博客中看到了 Class 类的方法 new 的一些覆盖. 所以 Class 表现为一个类,但它的实例是类.所以看起来我们有一个圆圈,看起来类Class是它自己的一个实
..
class
..
这个问题不是讨论单例设计模式是可取的,是一种反模式,或用于任何宗教战争,但要讨论如何以最 Python 化的方式在 Python 中最好地实现这种模式.在这种情况下,我将“最 Pythonic"定义为遵循“最小惊讶原则". 我有多个类会变成单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望用添加的口香糖把几个类弄得杂乱无章. 最佳方法: 方法一:装饰器
..