python 学习之:将字符串转换成变量,调用该变量实例对象的方法

时间:2022-07-24
本文章向大家介绍python 学习之:将字符串转换成变量,调用该变量实例对象的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、前言

今天在交流群里看到这样的一个学习案例,就这样说吧,先定义一个类:

class Dog():
    """模拟小狗的简单动作"""
 
    def __init__(self, name, age):  # init 前后都是两根下划线
        """初始化 name 和 age"""
        self.name = name
        self.age = age
 
    def sit(self):
        """小狗被命令时蹲下"""
        print(self.name.title() + " is now sitting !")
 
    def roll(self):
        """小狗被命令时打滚"""
        print(self.name.title() + " rolled over !")
 

然后我们实例化一些对象:

my_dog = Dog('小黑', 6)
your_dog = Dog('小白', 12)
she_dog = Dog('小希', 18)

我们定义一个list:

 peoples = ['my', 'your', 'she']
 

我们现在想的就是,将peoples里面的这些变量进行拼接,得到上面我们实例化的对象,然后执行这些对象里面的sitroll的方法:

for people in peoples:
    people_dog = people + "_dog"
    people_dog.sit()
    people_dog.roll()

可以看到,这样写,只是将集合里面的字符串进行了拼接,不能够实现对应成上方的变量名,所以我们使用编辑器就可以看到sit()roll()是显示不存在的。查资料得到,我们可以使用python3自带的方法进行转换,就是将字符串转换成当前的变量名:

我查看到的是有三种方法:locals()[varName], vars()[varName], eval(varName)

这里我只写eval()这种方式:

for people in peoples1:
    people_dog = eval(people + "_dog")
    people_dog.sit()
    people_dog.roll()
 

这时,我们就会看到sit()和roll()方法时可以执行的。这就是简单的字符串转换成变量名的方法。

二、完整代码:

class Dog():
    """模拟小狗的简单动作"""
 
    def __init__(self, name, age):  # init 前后都是两根下划线
        """初始化 name 和 age"""
        self.name = name
        self.age = age
 
    def sit(self):
        """小狗被命令时蹲下"""
        print(self.name.title() + " is now sitting !")
 
    def roll(self):
        """小狗被命令时打滚"""
        print(self.name.title() + " rolled over !")
 
 
my_dog = Dog('小黑', 6) 
your_dog = Dog('小白', 12) 
she_dog = Dog('小希', 18)
peoples1 = ['my', 'your', 'she']
for people in peoples1:
    people_dog = eval(people + "_dog")
    people_dog.sit()
    people_dog.roll()
    print(people.title() + " dog's name is " + people_dog.name.title() + "!")
    print(people.title() + ' dog is ' + str(people_dog.age) + " years old !")
 

PS:参考博客:https://blog.csdn.net/mlgglm/article/details/52472123

这三种方法的区别:https://blog.csdn.net/ztf312/article/details/51122027