如何解决如何在python中通过名称设置属性的属性?
我有一段代码,其中有一个对象B
,该对象具有另一个对象A
作为属性,我希望用户能够按名称设置任何一个对象的属性。我如何让用户设置A
或B
的属性?
以下代码说明了我正在尝试做的事情:
>>> class A:
... def __init__(self):
... self.asd = 123
>>> class B:
... def __init__(self,a):
... self.a = a
>>> a=A()
>>> b=B(a)
>>> b.a.asd
123
>>> setattr(b,'a.asd',1000)
>>> b.a.asd
123 # I would like this to be 1000
prop = input("Property name to set: ")
try:
print(f"Current value of property {prop}: {getattr(B,prop)}")
value = input("Property value to set: ")
setattr(B,prop,value)
except AttributeError:
print(f"Object {B} has no property named {prop}. See {dir(B)}")
编辑:问题已解决,但我无法在2天内接受自己的回答
解决方法
setattr(getattr(b,'a'),'asd',1000)
,
无法使用setattr()
中的属性名称遍历对象。因此,为了模拟这种行为,可以在.
上分割属性名称,然后使用getattr()
选择要在其上设置属性的对象。这样,您只需要提示用户输入属性名称和值即可。
prop = input("Property name to set: ")
obj_to_set = B
try:
for i in prop.split(".")[:-1]:
obj_to_set = getattr(obj_to_set,i)
prop_name = prop.split(".")[-1]
print(f"Current value of property {prop_name}: {getattr(obj_to_set,prop_name)}")
value = input("Property value to set: ")
setattr(obj_to_set,prop_name,value)
except AttributeError:
print(f"Object {obj_to_set} has no property named {prop}. See {dir(obj_to_set)}")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。