gpt4 book ai didi

python - 了解插槽如何与字典类一起使用

转载 作者:行者123 更新时间:2023-11-30 22:32:53 25 4
gpt4 key购买 nike

最近有人向我指出了 __slots__ 的用法,我在互联网上发现它可以提高内存使用率

class Passenger2():
__slots__ = ['first_name', 'last_name']
def __init__(self, iterable=(), **kwargs):
for key, value in kwargs:
setattr(self, key, value)

class Passenger():
def __init__(self, iterable=(), **kwargs):
self.__dict__.update(iterable, **kwargs)

# NO SLOTS MAGIC works as intended
p = Passenger({'first_name' : 'abc', 'last_name' : 'def'})
print(p.first_name)
print(p.last_name)

# SLOTS MAGIC
p2 = Passenger2({'first_name' : 'abc', 'last_name' : 'def'})
print(p2.first_name)
print(p2.last_name)

虽然第一类按预期工作,但第二类会给我一个属性错误。 __slots__

的正确用法是什么
Traceback (most recent call last):
File "C:/Users/Educontract/AppData/Local/Programs/Python/Python36-32/tester.py", line 10, in <module>
print(p.first_name)
AttributeError: first_name

最佳答案

解压您提供的关键字参数:

p2 = Passenger2(**{'first_name' : 'abc', 'last_name' : 'def'})

并迭代kwargs.items()以获取键值对。

在您正在执行的通话中:

p2 = Passenger2({'first_name' : 'abc', 'last_name' : 'def'})

您提供的字典被分配给iterable,而不是kwargs,因为您将其作为位置传递。在这种情况下,**kwargs 为空,并且不执行任何分配。

请记住,**kwargs 会抓取多余的关键字参数,而不仅仅是传递的任何字典。

关于python - 了解插槽如何与字典类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com