繁体   English   中英

如何在Python中将对类/函数的调用转换为字符串?

[英]How do you convert a call to a class/function to a string in Python?

我是编程和自学的新手。 我已经使用Stack Exchange来查找我的许多问题的答案,而不需要问(这是一个很棒的社区),但我似乎无法在任何地方找到答案。 如果这是重复,我道歉。

我正在尝试为变量分配方法,但我想将其保存到文本文件中以便以后访问。 我正在使用open()来访问文本文件,并使用eval()在加载信息时从字符串中更改它。 我只是无法弄清楚如何做相反的事情。

from random import randint

class Example (object):
    def __init__(self):
        self.name = ""
        self.lucky_number = ""

    def create_person(self):
        self.name = input("What is your name?")
        self.lucky_number = randint(1,10)
        save_person = [self.name, self.lucky_number]
        with open("example.txt", "w") as f:
            for i in save_person:
                f.write(i + '\n')

    def load_person(self):
        with open("example.txt", 'r') as f:
            person_list = f.readlines()
        if len(person_list) <= 1:
            create_person()
        else:
            self.name = person_list[0].strip('\n')
            self.lucky_number = eval(person_list[1].strip('\n'))

person = Example()
person.load_person()

我想保留randint(1,10)部分,因为我想重用该函数,但我可能会根据用户选择将值更改为其他值(例如将self.lucky_number = randint(1,10)更改为self .lucky_number = randint(1,30))。

我知道我可以将它改为self.lucky_number = randint(1,var),然后保存var的值,但它让我想知道我正在尝试的方式是否可行。

在此先感谢您的任何帮助。 我使用的是Python 3.5。

编辑:为了澄清我想在文本文件中存储实际函数,即randint(1,10),而不是函数的值。

编辑2:我将接受这个回答,因为我找到了一种方法来做我需要的,但这不是直接的方式。

我能够找到一种方法来完成我想要的东西,但这是一种迂回的方式。 我将对函数的调用更改为字符串,然后创建了一个新的类变量,该变量使用函数字符串调用变量。 现在运行该函数的另一个类变量现在有eval()并调用我创建的新类变量。 我改为保存新的类变量。

from random import randint

# Now a string instead of a function call
prog = "randint(1,10)"

class Example (object):
    def __init__(self):
        self.name = ""
"""Added self.temp to grab the string from outer 
variable and will change self.temp to get the desired
functions as strings"""
        self.temp = prog
"""self.lucky_number grabs new class variable and
eval() turns it into callable function"""
        self.lucky_number = eval(self.temp)

    def create_person(self):
        self.name = input("What is your name?")
        self.temp = prog
        self.lucky_number = eval(self.temp)
""" Saves new class variable now and stores actual 
function, eg randint(1,10)"""
        save_person = [self.name, self.temp]
        with open("example.txt", "w") as f:
            for i in save_person:
                f.write(str(i) + '\n')

    def load_person(self):
        with open("example.txt", 'r') as f:
            person_list = f.readlines()
        if len(person_list) <= 1:
            self.create_person()
        else:
            self.name = person_list[0].strip('\n')
            self.temp = person_list[1].strip('\n')

person = Example()
person.load_person()

它的环形交叉路口,但完成工作。 我可以将self.temp更改为我需要的任何变量(格式正确)并且代码可以工作。 如果有人能想到直接的方式,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM