Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将整个类写入Python文件(并替换用户输入)_Python - Fatal编程技术网

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

将整个类写入Python文件(并替换用户输入),python,Python,基本上,我需要将整个类写入一个新的.py文件。唯一的问题是类中的两个重要变量依赖于用户输入。当我将类写入文件时,我需要有用户输入的实际数字/字符串。以下是我目前拥有的一个示例: class CreateClient: def writer(self): file = open('client_test.py', 'w+') file.write(Client) print("File created") class ClientConfi

基本上,我需要将整个类写入一个新的.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访问主机或端口变量,它将无法工作,因此我不知道如何使用replace

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
注意:如果您不打算在
hostvar
hostvar
中使用
self
对象,我强烈建议您使用
staticmethod

CreateClient 这里“您正在调用
file.write(Client)
,在这里您将类作为参数传递。假设您想将代码写入另一个文件,这肯定是您不想做的事情,因为它根本不起作用*。我建议您只需将代码复制粘贴到新文件中并保存即可

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

客户端配置 在这里,你有一个选择。正如@pramod所建议的,您可以将这些方法转换为静态方法。或者,您可以不使用它,我将在
客户机中向您展示如何相应地调用这些

客户 如果您不想使用静态方法,这里有一个解决方案:

class Client:
    def examp(self):
        c = ClientConfig()
        self.host = c.hostvar()
        self.port = c.portvar()
如果你想使用静态方法,这个类的另一个定义是由pramod给出的


创建新的python文件[根据要求] 从某些python脚本中调用:

import os
os.system("python cilent_test<some_number>.py")
导入操作系统
系统(“pythoncilent_test.py”)

将用户输入的变量作为arg传递给hostvar函数,请您再清楚一点好吗?只是
Client
需要去其他地方吗?另外,为什么要将
ClientConfig
作为参数传递给这些函数?您应该编写一个,您现在编写的并不是您所建议的编写python源代码。另外,你为什么要这么做?你到底想完成什么?@Coldspeed整个类“Client”需要写入一个新的.py文件。如果我不在括号中传递ClientConfig,我会得到一个“parameter unfilled:self”错误。好吧,@sS5H你做得不对,但没有问题。这是可以解决的。你的另一个问题是什么?谁需要主机=127.0.0.1',端口=9999?这是在哪里输入的?它是从文件中取的吗?它是从用户输入中获取的吗?你提供了吗?谢谢你的代码。当我尝试将类客户端写入文件时,我得到一个TypeError,它必须是字符串,而不是类型。我有什么办法可以做到这一点吗?你有没有用这个更新你的
ClientConfig
类?谢谢你的回答。整个类“Client”需要以某种方式写入函数中的一个新文件,否则我试图实现的目标就没有任何意义了。但是,我不知道这在远程是否可行。@sS5H是否要将源代码放入新文件中?或者你想在一个新文件中包含
客户端的某个对象吗?@sS5H你想实现什么?你为什么要写一个新的源文件?这毫无意义。@Coldspeed我需要将客户机的整个代码块放入一个新文件中才能正常工作。我的目标是从本质上创建一个函数,该函数可以在单独的file@sS5H您应该考虑创建一个新的实例:<代码>客户端<代码>,并将其保存在一个新文件中。然后你可以随心所欲地使用它。您希望使用的另一种方法是将
客户机
的定义保存在一个巨大的字符串中,然后将其写入一个新文件,然后使用
子流程
系统
调用该文件。非常痛苦。
import os
os.system("python cilent_test<some_number>.py")