我想能够赋值给类的属性而不指定它们。你知道吗
我想做什么工作
A)
class HoldingStuff(object):
def __init__(self, **args):
self.a = 1
self.b = '1'
self.c = 2
self.d = '3'
self.e = 4
for arg in args:
self[arg] = args[arg]
first = HoldingStuff(a=5)
second = HoldingStuff(d=2, e='2')
当然,我可以在保存值的类中使用字典。但是,这有一个很大的缺点,因为我不能对属性使用代码完成。这使得它们很难再利用和找到。(属性是模拟的可变参数的广泛列表。)
什么是有效的(不实用的)
B)
class HoldingStuff(object):
def __init__(self, **args):
self['a'] = 1
self['b'] = '1'
self['c'] = 2
self['d'] = '3'
self['e'] = 4
for arg in args:
self[arg] = args[arg]
什么是有效的
C)
class HoldingStuff(MutableMapping):
def __init__(self, **args):
self.a = 1
self.b = '1'
self.c = 2
self.d = '3'
self.e = 4
for arg in args:
self[arg] = args[arg]
def __setitem__(self, k, v) -> None:
if k =='a':
self.a = v
elif k =='b':
self.b = v
elif k =='c':
self.c = v
elif k =='d':
self.d = v
elif k =='e':
self.e = v
else:
print(k, "Not available for class.")
def __delitem__(self, v) -> None:
pass
def __getitem__(self, k) -> _VT_co:
if k =='a':
return self.a
elif k =='b':
return self.b
elif k =='c':
return self.c
elif k =='d':
return self.d
elif k =='e':
return self.e
else:
print(k, "Not available for class.")
def __len__(self) -> int:
return 5
def __iter__(self):
print("Not implemented")
函数__setitem__
和__getitem__
看起来很明显而且重复!你知道吗
问题 有没有办法将示例C)的源代码简化为示例a)的隐式工作方式?你知道吗
不能评论,因为我的声望不到50。 在方案a中
你有台词:
但是你插入一个字符串并试图找到它的args索引
我认为你应该尝试使用:
感谢您的评论,帮助我找到:
https://stackoverflow.com/a/6760593/3707039
提供了一个优雅的解决方案
使用setattr。你知道吗
相关问题 更多 >
编程相关推荐