gpt4 book ai didi

Python:使用 *args **kwargs 传递可选的命名变量

转载 作者:行者123 更新时间:2023-12-02 06:33:36 25 4
gpt4 key购买 nike

我有一个自定义字典类(collections.MutablMapping),实际对象有点复杂,但我的问题相当简单,如何将自定义参数传递到 *args **kwargs 之外的 __init__ 方法转到 dict()

class TestDict(collections.MutableMapping):
def __init__(self, *args, **kwargs):
self.store = dict()
self.update(dict(*args, **kwargs))
self.custom_name = None #how to pass custom name outside of the dict args?
def __getitem__(self, key):
return self.store[key]
def __setitem__(self, key, value):
self.store[key] = value
def __delitem__(self, key):
del self.store[key]
def __len__(self):
return len(self.store)
def __iter__(self):
return iter(self.store)
def __repr__(self):
return str(self.store)

编辑:(我的评论的代码,再次不确定这是否是正确的方法,特别是如果有多个键名参数要放入 self 而不是 dict() 中):

def __init__(self, *args, **kwargs): 
try: custom_name = kwargs.pop('custom_name')
except: custom_name = None
self.store = dict()
self.update(dict(*args, **kwargs))
self.custom_name = custom_name

最佳答案

在 Python 3 中,你会这样做:

def __init__(self, *args, custom_name=None, **kwargs):
self.custom_name = custom_name

# do your stuff...

在 Python 2 中,你会这样做:

def __init__(self, *args, **kwargs):
try:
self.custom_name = kwargs["custom_name"]
del kwargs["custom_name"]
except:
self.custom_name = None

# do your stuff...

任一版本都将像这样实例化:

d = TestDict({"spam": "egg"}, custom_name="my_custom_dict")

关于Python:使用 *args **kwargs 传递可选的命名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303233/

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