我是编程和自学的新手。我已经使用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) )to self.lucky_number = randint(1,30))。
我知道我可以将它改为self.lucky_number = randint(1,var),然后保存var的值,但它让我想知道我正在尝试的方式是否可行。
提前感谢您的任何帮助。我使用的是Python 3.5。
编辑:为了澄清我想在文本文件中存储实际函数,即randint(1,10),而不是函数的值。
编辑2:我将接受这个回答,因为我找到了一种方法来做我需要的,但这不是直接的方式。
答案 0 :(得分:0)
我能找到一种方法来完成我想要的东西,但这是一种迂回的方式。我将对函数的调用更改为字符串,然后创建了一个新的类变量,该变量使用函数字符串调用变量。现在运行该函数的另一个类变量现在有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更改为我需要的任何变量(格式正确)并且代码可以工作。如果有人能想到直接的方式,请告诉我。