【发布时间】:2020-09-14 02:32:55
【问题描述】:
我有一段代码,其中我有一个对象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(b.a, 'asd', 1000)? -
我无法提示用户输入
b.a。我希望用户能够设置 A 和 B 的属性。为了清楚起见,更新了问题。 -
'a.asd' 是一个字符串。 setattr 不会解释 '.'不仅仅是一个时期。在您的示例中, b 是一个对象。 b.a 是一个不同的对象。 setattr 需要确切的对象作为其第一个参数 - 请参阅@Mark Meyer 的先前评论
-
可以分享一下用户提示码吗?
-
用提示码更新问题。
标签: python properties