Python 从dict继承类的术语
在这种情况下,是否应该说f既有又是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?描述和思考这个问题的正确术语是什么
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)
即可获得项目。