在这种情况下,如果有且 是一个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]
编辑:我对我们描述这些词典的方式很感兴趣。有什么合适的术语来讨论这个问题?
答案 0 :(得分:2)
从实施的角度来看,是的,f
有 dict而是 dict。您已充分证明__dict__
和f
本身都是单独的词典。
但是,我认为考虑它的实际方法是f
具有 属性(通过__dict__
)但它也是 一个dict
(通过子类化)。你真的不应该直接访问__dict__
;它是Python类的实现细节。
当然,Python是Python,没有理由隐藏程序员的内部细节。 “我们都同意成年人”,就像Pythonism一样。
答案 1 :(得分:1)
这更像是与语言无关的语句,但是定义的类之间存在两种关系:
您的班级Foo
是 dict
,因为它继承自dict
。并不是它有一个dict
,因为没有单独的属性是字典,如果用作一个{a-la duck typing,它也会表现得像dict
。< / p>
答案 2 :(得分:0)
看那个:
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}
>>>
obj.__dict__
包含所有变量。
>>> class cl:
def __init__(self):
self.val = 12
>>> f = cl()
>>> f.__dict__
{'val': 12}