一、前言
今天在交流群里看到这样的一个学习案例,就这样说吧,先定义一个类:
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里面的这些变量进行拼接,得到上面我们实例化的对象,然后执行这些对象里面的sit和roll的方法:
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
感谢交流群分享的小伙伴:”中意大眼睛小姐 0.01Km”