gpt4 book ai didi

python-3.x - 根据python中给定对象的类型创建一个新对象

转载 作者:行者123 更新时间:2023-12-04 10:31:19 26 4
gpt4 key购买 nike

我有一个函数,它获取一个序列作为参数,并根据该序列的类型创建一个该类型的新对象。

def myFunc(seq):
new_object = # don't know how to instantiate it based on seq type.

例如,如果 'seq' 是一个列表,则 'new_object' 将是一个空列表。
或者,如果 'seq' 是一个字符串,则 'new_object' 将是一个空字符串,依此类推。

我怎样才能做到这一点??

最佳答案

这有效:

def make_empty(obj):
return type(obj)()

>>> make_empty([1, 2, 3])
[]

>>> make_empty('abc')
''

不仅适用于数字,还适用于序列:
>>> make_empty(2)
0

或字典:
>>> make_empty({'a': 100})
{}

使用 type获取对象的类型并使用 ()创建它的新的空实例。

允许指定允许类型的版本:
def make_empty(obj, allowed_types=None):
if allowed_types is None:
return type(obj)()
for typ in allowed_types:
if isinstance(obj, typ):
return type(obj)()
raise TypeError(f'Type {type(obj)} not allowed')

现在。

它仍然适用于非序列:
>>> make_empty(3)
0

但是可以指定允许的类型:
>>> make_empty(3, allowed_types=(str, list, tuple))
...
TypeError: Type <class 'int'> not allowed

如果允许,这些序列有效:
>>> make_empty('abc', allowed_types=(str, list, tuple))
''
>>> make_empty([1, 2, 3], allowed_types=(str, list, tuple))
[]
>>> make_empty((1, 2, 3), allowed_types=(str, list, tuple))
()

如果不允许,字典不会:
>>> make_empty({'a': 100}, allowed_types=(str, list, tuple))
...
TypeError: Type <class 'dict'> not allowed

关于python-3.x - 根据python中给定对象的类型创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60417117/

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