- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是一个例子:
>>> def magic(name, bases, dct):
... print(repr(bases))
... return type(name, (object,), dct)
...
>>> class Foo('hello world!', metaclass=magic):
... pass
...
('hello world!',)
>>> Foo
<class '__main__.Foo'>
>>> Foo.__bases__
(<class 'object'>,)
>>>
我对 class
语句特别感兴趣。虽然这看起来确实有效,但我无法在 language reference 中找到任何对此技术的具体认可。 . “高级使用”语言可能是指使用关键字参数(例如 metaclass=
),而不是位置参数。我想知道这是偶然发生的还是有意为之。
如果元类是 type
的子类,它确实会失败并返回一个相当有趣的 TypeError
,如讨论的 elsewhere in the reference :
>>> class Meta(type):
... def __new__(mcs, name, bases, dct):
... print(repr(bases))
... bases = (object,)
... return super().__new__(mcs, name, bases, dct)
... def __init__(cls, name, bases, dct):
... super().__init__(name, (object,), dct)
...
>>> class Foo('hello world!', metaclass=Meta):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
>>>
总结一下:什么时候(如果有的话)将非类作为基类传递是合法的?
最佳答案
您的问题表述有误:如果继承对象(基类)不是类,那么它们就不是“基类”。关于复合语句的语言文档部分:class says
The inheritance list usually gives a list of base classes
“通常”预示着基类不是类的可能性。话虽如此,该文档似乎继续假设基是类并且可以称为“基类”。
你的例子表明这种可能性是可以实现的。数据模型:自定义类创建部分(3.4 中的 3.3.3)关于“高级用途”详细介绍了类语句的工作原理。相关步骤首先是确定元类,最后是调用元类。
我发现 3.3.3.1“确定适当的元类”有点不清楚。第一条规则
if no bases and no explicit metaclass are given, then type() is used
不适用于您的任何一个示例。第二条规则
if an explicit metaclass is given and it is not an instance of type(), then it is used directly as the metaclass
似乎适用于您的第一个示例。但我想知道“实例”应该是“子类”还是“实例或子类”。否则,这似乎适用于您的第二个示例,但事实并非如此。第三条规则
if an instance of type() is given as the explicit metaclass, or bases are defined, then the most derived metaclass is used
必须包括 type() 的子类而不是(只是?)“实例”,因为我们知道它已应用于您的第二个示例。第二个子句(“或基础......”似乎适用于你的第一个例子,但我相信它不会。
当前对类创建的最终答案应该在类型对象中 source .错误信息来自第 2265 行。
关于python - 在 Python 3.x 中,将非类指定为基类是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445881/
经过几个小时的(重新)搜索,我无法想出普通抽象类和使用模板模式之间的可解释区别。 我唯一看到的是: 使用抽象类时,您需要实现所有方法。但是在使用模板方法时,您只需要实现这两个抽象方法。 有人可以向我解
我正在尝试实现一种算法,该算法可找到以下形状给出的外多边形的每个单独边的对应区域。也就是说,1,2 边的相应区域是 [1,6,7,8,2],2,3 边的区域是 [2,8,3] 等等,CCW 或 CW
我正在尝试在派生 self 的 BaseController 类的任何 Controller 上自动设置一个属性。这是我的 Application_Start 方法中的代码。 UnitOfWork 属
我正在使用 mgcv 包通过以下方式将一些多项式样条拟合到一些数据: x.gam smooth$knots [1] -0.081161 -0.054107 -0.027053 0.000001
考虑以下代码: void foo(){ ..... } int main() { int arr[3][3] ; char string[10]; foo();
本书The c++ programming language有这个代码: class BB_ival_slider : public Ival_slider, protected BBslider {
是否有一个 package.json 属性可用于指定模块解析应启动的根文件夹? 例如,假设我们在 node_modules/mypackage/src/file1 中有一个安装。我们要导入的所有文件都
我正在尝试使用聚合函数来实现与 SQL 查询相同的结果: 查询语句: sqldf(" SELECT PhotoID, UserID,
我正在比较使用 LOESS 回归的两条线。我想清楚地显示两条线的置信区间,我遇到了一些困难。 我尝试过使用各种线型和颜色,但在我看来,结果仍然是忙碌和凌乱。我认为置信区间之间的阴影可能会使事情变得更清
给定这段代码 public override void Serialize(BaseContentObject obj) { string file = ObjectDataStoreFold
我正在构建某种工厂方法,它按以下方式将 DerivedClass 作为 BaseClass 返回: BaseClass Factory() { return DerivedClass(); }
当重写 class delegation 实现的接口(interface)方法时,是否可以调用通常从重写函数中委托(delegate)给的类?类似于使用继承时调用 super 的方式。 来自docum
我有一个基类 fragment (如下所示)。我在其他 3 个 fragment 类中扩展了此类,每个类都共享需要在这 3 个 fragment 中访问的相同 EditText。因此,我在基类中设置了
如何在不加载额外库的情况下在 R 中计算两个排列之间的 Kendall tau 距离(又名冒泡排序距离)? 最佳答案 这是一个 O(n.log(n)) 的实现,在阅读后拼凑而成,但我怀疑可能有更好的
情况 我创建了一个具有国际化 (i18n) 的 Angular 应用程序。我想在子域中托管不同的版本,例如: zh.myexample.com es.myexample.com 问题 当我使用命令 n
std::is_base_of 之间的唯一区别和 std::is_convertible是前者在 Base 时也成立是 私有(private)或 protected Derived 的基类.但是,您何
我创建了一个名为 baseviewcontroller 的父类(super class) uiviewcontroller 类,用于包含大多数应用屏幕所需的基本 UI。它包括一个自定义导航栏和一个“自
我是一名优秀的程序员,十分优秀!