基本上,我需要将一个完整的类写入一个新的.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尝试访问主机或端口变量,它将无法工作,所以我看不出如何使用替换。
答案 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
注意:如果您不打算在self
或hostvar
中使用hostvar
对象,我强烈建议您使用staticmethod
。
答案 1 :(得分:0)
此处'您正在调用$((...))
,您将该类作为参数传递。假设您想将代码写入另一个文件,这绝对是您不想做的事情,因为它不起作用*。我建议你自己将代码复制粘贴到一个新文件中并保存。
*这是因为,如果要保存python对象,则需要将它们转换为字节流。最好的方法是使用echo "${!x}"
模块,但这与您的问题无关
在这里,你有一个选择。正如@pramod建议的那样,您可以将这些方法转换为静态方法。或者,你可以保留它,我会告诉你如何在file.write(Client)
中相应地调用它们。
如果您不想使用静态方法,这是一个解决方案:
pickle
如果你想使用静态方法,那么这个类的替代定义已由pramod给出。
Client
从某些python脚本中调用:
class Client:
def examp(self):
c = ClientConfig()
self.host = c.hostvar()
self.port = c.portvar()