如何从字符串变量中定位类的特定实例

2024-09-29 18:50:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,需要从一个字符串变量中的一个类实例中获取信息。你知道吗

我曾向一位程序员朋友求助,但他擅长C语言,而不是python3语言,所以他能提供的最好的帮助就是尝试使用exec()命令。这对我没什么帮助。你知道吗

假设我有一些设置汽车信息的代码

class Cars:
    def __init__(self, Brand, Model, Owner):
        self.Brand = Brand
        self.Model = Model
        self.Owner = Owner

Car1 = Cars("Honda", "Civic", "Jon Arbuckle")

Car2 = Cars("Ford", "Focus", "Martha Jones")

MysteryCar = "Car1"

从只知道存储在MysteryCar中的内容返回值"Jon Arbuckle"是否仍然存在?你知道吗


Tags: 实例字符串self程序model朋友carspython3
2条回答

你的朋友是对的。可以使用exec运行一些Python代码,这些代码是使用MysteryCar所指向的字符串定义的。我喜欢f-strings(Python 3.6+),但您也可以用其他方式格式化strong:

>>> command = f"car_owner = {MysteryCar}.Owner"
>>> exec(command)
>>> print(car_owner)
Jon Arbuckle

MysteryCar将计算为f字符串中的Car1,因此您正在执行命令

car_owner = Car1.Owner

上面。你知道吗

然而,正如一些评论所指出的那样,我会质疑这是解决这个问题的最好办法,还是你应该仅仅使用一本字典。你知道吗

使用locals()这是本地作用域变量的名称(作为字符串)的dict作为键,它们的值作为…..以及它的值!你知道吗

print(locals()[MysteryCar].Owner)

另一种选择是使用eval,这是一种将字符串作为python代码计算的方法。所以你可以这样做:

print(eval(MysteryCar).Owner)

但总的来说eval被认为是有风险的,应该避免,在我看来。。。你知道吗

例如,如果您的MysteryCar是来自用户的输入,如果用户输入一些危险的命令,可能会导致严重的问题。你知道吗

另一方面,使用locals可以让用户知道他的选择是否错误

相关问题 更多 >

    热门问题