提问人:Balu 提问时间:3/28/2022 最后编辑:Balu 更新时间:3/28/2022 访问量:134
为什么 fromkeys 是方法而不是内置函数?
Why is fromkeys a method rather than a built-in function?
问:
为什么类的方法是类的方法,而不是独立的内置函数?fromkeys
dict
据我所知,它仅根据传递给方法的参数返回一个新字典,并且不受从中调用它的类实例(字典)的影响。通常的实现只是直接使用类名,而不是首先指定类实例。dict
我尝试了以下语句,但它们都始终忽略了我提到的类实例。
>>> dict.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((2,))
{2: None}
Python 文档也没有提到参数的作用。它没有提到类实例的任何用途,但也没有声明它的无目的性。
我相信原因可能与命名空间管理有关。用户创建的函数不会以这种方式影响内置类方法,对吧?fromkeys
我只是想确保我没有错过类实例可能具有的任何目的,以避免将来在我的代码中出现错误
答:
1赞
chepner
3/28/2022
#1
的结果仅依赖于自身和传递给函数的参数。它不使用存储在现有实例中的任何信息,因此没有理由提供信息。dict.from_keys
dict
至于为什么它不是一个函数,仍然可以为子类工作,而不必做任何不同的事情。dict.from_keys
dict
>>> from collections import OrderedDict
>>> type(OrderedDict.fromkeys([1,2,3]))
<class 'collections.OrderedDict'>
Counter.fromkeys
行不通,但那是因为被专门覆盖以建议替代方案。Counter.fromkeys
粗略地说,你可以认为是这样实现的:dict.fromkeys
@classmethod
def fromkeys(cls, keys, value=None):
return cls((k, value) for k in keys)
像这样的电话
{'a': 1}.fromkeys(['b'])
相当于
dict.fromkeys(dict, ['b']) # First argument is type({'a': 1}), not dict
评论
0赞
Balu
3/28/2022
所以澄清一下,我们从哪个字典中调用该方法并不重要,对吧?
0赞
chepner
3/28/2022
右。 使用其第一个参数来决定要实例化的内容,而不是严格地创建一个 .由类的实例调用的类方法仍接收类,而不是实例作为其第一个参数。dict.fromkeys
dict
0赞
Balu
3/28/2022
你是在暗示还有其他类有 fromkeys 方法吗?
0赞
chepner
3/28/2022
我不否认。但不必定义自己的方法即可返回 . 在类中定义,但它不是特定于 的。OrderedDict
fromkeys
dict.fromkeys
OrderedDict
fromkeys
dict
dict
评论
fromkeys((1, 2))
fromkeys
type.alternative_way_to_build_type(args)
dict_fromkeys