2013-06-13 2 views
0

Я пытаюсь редактировать библиотеку в питоне (perfmon) - файл session.pyPython 2.7 - Классы

Я хочу, чтобы добавить модуль, который может записывать некоторые чтения из порта 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, могу ли я вернуть там значение?

+2

Похоже, что вы являетесь файлом с именем 'perfmon.py', но на вашем пути поиска есть модуль' perfmon'. Я предполагаю, что ваш оператор import выбирает неправильный ... – mgilson

+0

Например: если я хочу сказать PerThreadSession. Я говорю, perfmon.PerThreadSession (,,) – pistal

+0

Вы можете показать 'perfmon .__ file__' результат – oleg

ответ

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 
+0

Я могу создать файл в своей собственной папке. это один из вариантов. Но из того, что я вижу из ответа '@ jaime', мы не можем вернуть ничего другого, кроме none для конструктора класса. – pistal

+0

У вас есть 3 ошибки в вашем вопросе 2 в модуле и один в сеансе python – oleg

+0

Я буду переписывать модуль в той же папке. может быть, это проще и лучше. – pistal

2

не может вернуть ничего (кроме None) из конструктора класса.

иначе один получит

TypeError: __init__() should return None 
+0

Вы подозреваете, что это причина, по которой я не вижу o/p на экране? – pistal

+0

В вашем примере две ошибки. Сначала вы видите – oleg

+0

Спасибо. Я должен сначала изучить классы для python. – pistal