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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38374974/article/details/81484303

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

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

感谢交流群分享的小伙伴:”中意大眼睛小姐       0.01Km”

猜你喜欢

转载自blog.csdn.net/weixin_38374974/article/details/81484303