Python 从dict继承类的术语

Python 从dict继承类的术语,python,Python,在这种情况下,是否应该说f既有又是dict?“是”似乎不太正确。f是否有两种不同的dict?描述和思考这个问题的正确术语是什么 class Foo(dict): def __init__(self): self.name = "John" self["number"] = 42 f = Foo() f.__dict__ >>> {'name': 'John'} [A] f.items() >>> [

在这种情况下,是否应该说f既有又是dict?“是”似乎不太正确。
f
是否有两种不同的dict?描述和思考这个问题的正确术语是什么

class Foo(dict):
    def __init__(self):
        self.name = "John"
        self["number"] = 42

f = Foo()

f.__dict__
>>> {'name': 'John'}          [A]
f.items()
>>> [('number', 42)]          [B]
f 
>>> {'number': 42}            [C]
编辑:我对我们描述这些词典的方式感兴趣。用什么合适的术语来谈论这个问题?

看看:

class Foo(dict):
    def __init__(self):
        self.name = "John"
        self.number = 42
        self.num = 4


>>> f = Foo()
>>> f.__dict__
{'name': 'John', 'number': 42, 'num': 4}
>>> 
对象包含所有变量

>>> class cl:
    def __init__(self):
        self.val = 12


>>> f = cl()
>>> f.__dict__
{'val': 12}

这更像是一个语言不可知的语句,但定义的类之间有两种关系:

  • ,用于描述成分(如混合物或性质),以及
  • ,当一个类是另一个类的子类型时使用

您的类
Foo
是一个
dict
,因为它继承自
dict
。这并不是说它有一个
dict
,因为没有一个单独的属性是字典,如果用作字典(a-la),它的行为也会像
dict

从实现的角度来看,是的,
f
两者都有一个dict,并且都是dict。您已经充分证明了
\uuu dict\uuuu
f
本身作为单独的词典存在

然而,我认为考虑它的实际方式是,
f
具有属性(通过
\uu dict\uuu
),但它也是一个
dict
(通过子类化)。你真的不应该直接访问
\uuu dict\uuu
;这是Python类的实现细节


当然,作为Python,没有理由对程序员隐瞒内部细节。正如Pythonism所说,“我们都是同意的成年人。”

f是dict。现在怎么办?@Igor:不,每个类实例都有一个
\uuu dict\uuu
,它包含实例的所有变量!我删除了我的评论,因为已经有了答案,但我从未说过它没有措辞。它有一个dictionnary(dict属性),但它也是一个dictionnary,因为它继承自dictionnary类。我想说是的,它既有dict属性,又是dict属性。你已经充分证明了这一点。只是提醒一下,如果有一个答案对你有帮助,请在旁边勾选复选标记,接受它。“没有一个单独的属性是字典”——正如clodion所指出的,有一个
\uuuuu dict\uuuu
,它确实有一个
\uu dict\uuu
属性,就像所有的类一样。@Yann:不是所有的类实例,例如那些有
\uuuuu插槽的类实例不一定都有。只要你考虑一下
dict
的每个实例本身是否“有一本”字典,哪个“有一本”字典,等等,这就好了。@Steve:是的,我说得有点快。我想也有数据类型没有dict(比如int或float)。谢谢你的精确性。那么,试试添加字典中的条目吧!使用
f.\uuuuu dict\uuuu
可以获得变量。使用
print(f)
即可获得项目。