将整个类写入Python文件(并替换用户输入)

时间:2017-06-11 19:56:58

标签: python

基本上,我需要将一个完整的类写入一个新的.py文件。唯一的问题是类中的两个重要变量依赖于用户输入。当我将类写入文件时,我需要具有用户输入的实际数字/字符串。这是我目前拥有的一个例子:

class CreateClient:
    def writer(self):
        file = open('client_test.py', 'w+')
        file.write(Client)
        print("File created")

class ClientConfig:

    def hostvar(self):
        inhost = str(input('Enter the listener hostname: '))
        return inhost

    def portvar(self):
        inport = int(input('Enter the port: '))
        return inport

class Client:
    def examp(self):
        host = ClientConfig.hostvar(ClientConfig)
        port = ClientCOnfig.portvar(ClientConfig)

正如您所看到的,我需要将客户编写为新文件,除非它会写入

host = ClientConfig.hostvar(ClientConfig)
port = ClientCOnfig.portvar(ClientConfig)

而不是我需要的东西(即host ='127.0.0.1',port = 9999)。有什么方法可以做到这一点,可能使用“替换”操作?如果我通过执行Client.examp.host尝试访问主机或端口变量,它将无法工作,所以我看不出如何使用替换。

2 个答案:

答案 0 :(得分:1)

class ClientConfig:
    @staticmethod
    def hostvar():
        inhost = raw_input('Enter the listener hostname: ')
        return inhost
    @staticmethod
    def portvar():
        inport = int(input('Enter the port: '))
        return inport

class Client:
    def examp(self):
        self.host = ClientConfig.hostvar()
        self.port = ClientConfig.portvar()

示例:

>>> client = Client()
>>> client.examp()
Enter the listener hostname: 127.0.0.1
Enter the port: 8000
>>> client.host
'127.0.0.1'
>>> client.port
8000

注意:如果您不打算在selfhostvar中使用hostvar对象,我强烈建议您使用staticmethod

答案 1 :(得分:0)

CreateClient

此处'您正在调用$((...)),您将该类作为参数传递。假设您想将代码写入另一个文件,这绝对是您不想做的事情,因为它不起作用*。我建议你自己将代码复制粘贴到一个新文件中并保存。

*这是因为,如果要保存python对象,则需要将它们转换为字节流。最好的方法是使用echo "${!x}" 模块,但这与您的问题无关

ClientConfig

在这里,你有一个选择。正如@pramod建议的那样,您可以将这些方法转换为静态方法。或者,你可以保留它,我会告诉你如何在file.write(Client)中相应地调用它们。

客户端

如果您不想使用静态方法,这是一个解决方案:

pickle

如果你想使用静态方法,那么这个类的替代定义已由pramod给出。

根据要求创建新的python文件

Client

从某些python脚本中调用:

class Client:
    def examp(self):
        c = ClientConfig()
        self.host = c.hostvar()
        self.port = c.portvar()