Python 2.7 Python,使用变量作为对象;名称“;

Python 2.7 Python,使用变量作为对象;名称“;,python-2.7,Python 2.7,我学习Python已经有一段时间了,因为我还是一个初学者,所以我尽量使事情简单。然而,有一件事我希望能够做到,但却做不好 我已经搜索并发现了一些类似的问题,我的,但答案大多是使用eval()和exec(),我读到的这是一种非常糟糕的做法。使用字典似乎是另一个经常被提议的选择,但我不知道如何将其应用到我的案例中 class pthead: def __init__(self, name, port): self.name = name self.port

我学习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(用于遗留用途)。

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


使用这个
head=pthead(“kop”,ser4)
它会工作的。当在脚本中使用时,它确实工作。在交互模式下(我尝试了不同的选项),情况并非如此
x=pthead(“name”,ser4)
返回
“name错误:名称‘ser4’未定义”
@DieterVansteenwegenON4DD如果您将其用作脚本,则需要在此处提供ser4的端口值。由于您要提供提供端口,因此需要在代码中定义它,然后将其作为参数传递。类外的代码是您在导入pheadMaybe时需要放在另一个文件中的代码我在我的示例中不清楚回复当我将其作为脚本运行时,它确实可以工作,但是如果我启动交互模式,然后从foo import pthead中导入
,并尝试创建一个带有
x=pthead(“name”,ser4)
的实例,我会得到
“name错误:名称'ser4'未定义”
如果我没有在端口周围加引号,则出现错误。@DieterVansteenwegenON4DD我找到了您,但您的程序没有像您提供名称和端口那样。您需要执行更改,
\uuuuu init\uuuuu
函数应该将
名称
端口
值作为参数,但实际上您使用的是
端口
变量作为参数
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()