0

Python でライブラリを編集しようとして(perfmon)います - ファイルはsession.py

USB ポートからの読み取り値を記録できるモジュールを追加したいと考えています。

これは、Python のクラスでの私の最初の試みでもあります

from perfmon import *
import os
import sys
import serial

# Common base class
class Session:
  def __init__(self, events):
    self.system = System()
    self.event_names = events
    self.events = []
    self.fds = []
    for e in events:
      err, encoding = pfm_get_perf_event_encoding(e, PFM_PLM0 | PFM_PLM3,
                                                  None, None)
      self.events.append(encoding)
    self.USB = serial.Serial("/dev/ttyUSB0",115200)

  def __del__(self):
    pass

  def read(self, fd):
    # TODO: determine counter width
    return os.read(fd, 8)

class PerThreadSession(Session):
  def __init__(self, pid, events):
    self.pid = pid
    Session.__init__(self, events)

  def __del__(self):
    Session.__del__(self)

  def start(self):
    for e in self.events:
      self.fds.append(perf_event_open(e, self.pid, -1, -1, 0))

  def read(self, i):
    return Session.read(self, self.fds[i])

class USB(Session):
  def __init__(self):   
    return self.USB

これは私が得ている次のエラーです:

Python 2.7.3 (default, Apr 14 2012, 08:58:41) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import perfmon
>>> test = perfmon.USB()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'USB'

私がしている間違いは何ですか?Python で self がコンストラクタとして機能することを理解しました。そこで値を返すことはできますか?

4

2 に答える 2

2

クラス コンストラクターから (None 以外に) 何も返すことはできません。

それ以外の場合は取得します

TypeError: __init__() should return None
于 2013-06-13T19:38:53.340 に答える
1

私が理解しているように、あなたの場合の答えは

>>> from perfmon import session
>>> test = session.USB()

しかし、このようにあなたが動くのは間違っています。ワークスペース/プロジェクト ディレクトリに独自のモジュールを作成する必要があります。セッションモジュールをインポートし、そこにクラスを作成します

from perfmon import session
class USB(Session):
    def __init__(self):   
        pass #I have changed this part as It has two errors in your example
于 2013-06-13T19:38:58.787 に答える