python中的对象继承
Posted
技术标签:
【中文标题】python中的对象继承【英文标题】:object inheritance in python 【发布时间】:2015-01-20 18:21:45 【问题描述】:今天早上我提出了一个奇怪的理想。众所周知,在 python 中,一切都是对象,包括类和函数。
不要问我为什么要这样做。这是一个玩python的实验。我知道它是从实例继承的。
我们试试吧:
kk=dict()
print dir(dict)
print dir(kk)
output of them are same
class yy(dict): pass ---ok
class zz(kk) : fail ---error
TypeError: Error when calling the metaclass bases
dict expected at most 1 arguments, got 3
谁能深入解释我为什么收到此错误消息?
再次。如果可能,请解释一下python是如何输出这个错误信息的?
【问题讨论】:
zz
正在尝试从 instance 继承。对于fail
上的NameError
,它甚至还远远不够。
查看python文档元类是如何工作的。
【参考方案1】:
这是因为您需要从type
继承。
dict
是一个类型,dict()
不是,它是一个字典的实例。 type
s 的类型是 type
,并且所有类型的实例都是 type
类型 - 它们的实例不是。
>>> type(dict)
<class 'type'>
>>> type(dict())
<class 'dict'>
>>> isinstance(dict, type)
True
>>> isinstance(dict(), type)
False
【讨论】:
【参考方案2】:您收到该特定错误的原因与元类有关。任何类的元类都必须匹配或子类化每个类的元类(如果它是基类)(以使“is-a”继承规则起作用)。您没有提供元类,因此 python 默认使用单个基类的类型。当基类是 dict 时,元类是类型(默认)并且一切正常。当基类为 kk 时,Python 尝试使用 dict 作为元类 - 问题在于,dict 不是 元类。错误说'dict不遵循元类api'。
【讨论】:
以上是关于python中的对象继承的主要内容,如果未能解决你的问题,请参考以下文章