如何在 python 中按名称设置 属性 的 属性?
How to set a property of a property by name in 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()
到 select 您想要设置 属性 的对象。这样,您只需提示用户输入 属性 名称和值。
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)}")
我有一段代码,其中有一个对象 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()
到 select 您想要设置 属性 的对象。这样,您只需提示用户输入 属性 名称和值。
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)}")