使用format()函数在类中调用变量

时间:2018-05-02 16:16:26

标签: python

这是我的代码的相同表示,我只想知道是否有办法从第一个动作(word)获得第二个动作(word1)的结果。这里的主要目标是,如果我更改变量letter,则指定的值也应该与类中的变量相对应。

class Test():
    def __init__(self, x='world'):
        self.a = 'hi {}'.format(x)
        self.b = 'hello'
        self.c = 'hey'


letter = 'a'
word = "Test(x='{}').{}".format('new world', letter)
print(word)
# prints Test(x='new world').a, expected 'hi new world'
word1 = Test(x='new world').a
print(word1)
# prints 'hi new world'

1 个答案:

答案 0 :(得分:0)

如果您尝试从对象获取属性,并且您有一个包含该属性名称的字符串,则可以使用getattr

class Test():
    def __init__(self, x='world'):
        self.a = 'hi {}'.format(x)
        self.b = 'hello'
        self.c = 'hey'

x = Test("new world")

letter = "a"
print(getattr(x, letter))
#output: hi new world

letter = "b"
print(getattr(x, letter))
#output: hello

如果您正在考虑“好的,但我不想再多次拨打getattr;我想一次word = getattr(x, letter),并且每次都会自动更新我之后更改letter。不幸的是,普通字符串是不可能的,因为字符串是不可变的。在创建字符串对象后,您无法更改它的值。您可以更改名称word所指的内容,但每次都需要一个赋值语句。