2017-08-17 15 views
0

私はまだ初心者ですから、Pythonに少しずつ入ってきました。できるだけシンプルにしようとしています。しかし、私がしたいことが一つありますが、正しいことはできません。Pythonでは、オブジェクト "name"として変数を使用します。

私は幾分似ているいくつかの質問を検索して見つけましたが、答えはほとんどが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)' 'NameError:name 'ser4'が定義されていません" –

+0

@ DieterVansteenwegenON4DDスクリプトとして使用している場合は、そこにser4のポート値を指定する必要があります。提供ポートを指定する前に、コードで定義してから引数として渡す必要があります。 –

+0

クラス外のコードは、頭をインポート中に他のファイルに入れなければならないものです –

関連する問題