2017-08-17 304 views
0

我已经进入Python一段时间了,因为我仍然是初学者,我尽量保持简单。然而,我希望有一件事能做到,但不能正确。Python,使用变量作为对象“名称”

我搜索了一下,发现了几个有点类似于我的问题,但答案主要是使用eval()exec(),我读到的是非常糟糕的做法。使用字典似乎是另一个经常提出的选项,但我不知道如何将其应用于我的案例。

class pthead: 

    def __init__(self, name, port): 
     self.name = name 
     self.port = port 

    def initialize(self): 
      ser4.write(initialization_commands) # works 
      (self.port).write(initialization_commands) # doesn't work 


UART.setup("UART4") 
ser4 = serial.Serial(port="/dev/ttyO4", baudrate=9600, timeout=0.5) 

head = pthead("kop", "ser4") 
head.initialize() 

难道真的很难使用变量作为对象吗?(希望我的术语是正确的)?我很难相信这是不是一个普通的事情,例如,用户输入后...

我使用python 2.7(用于遗留目的)。

+0

使用这个'head = pthead(“kop”,ser4)'它会工作。 –

回答

1

您没有正确使用它。你提供的端口不是一个端口,而是一个字符串`“ser4”。

class pthead: 

    def __init__(self, name, port): 
     self.name = name 
     self.port = port 

    def initialize(self): 
     self.port.write(initialization_commands) # it will work 

if __name__ == "__main__": 
    UART.setup("UART4") 
    ser4 = serial.Serial(port="/dev/ttyO4", baudrate=9600, timeout=0.5) 

    head = pthead("kop", ser4) #supplying port as second argument 
    head.initialize() 
+0

在脚本中使用时确实有效。在交互模式下(我尝试了不同的选项),情况并非如此...... 'x = pthead(“name”,ser4)'returns'“NameError:name'ser4'is not defined”' –

+0

@ DieterVansteenwegenON4DD如果您将它用作脚本,那么您需要在那里提供ser4的端口值。由于您想提供您的提供端口,因此您需要在代码中定义它,然后将其作为参数传递。 –

+0

在课堂以外的代码是你需要在导入头文件时放入另一个文件 –