簡體   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