[英]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.