2015-05-12 2 views
1

Мне требуется документация/пример для расширения методов C++ в python. Я просмотрел документацию на python и некоторые существующие вопросы на форуме, но не получил точных данных.Расширение методов OO OO в python

Чтобы быть точным, если у меня есть классы, как C++:

class Manager 
{ 

Manager *instance; 
std::list<User*> userList; 
Manager(); 
public: 
User* getUser(const char* name); 
static Manager* getInstance(); 

} 

class User 
{ 

User(); 
public: 
void doSomething(); 

} 

В питоне я ожидаю, чтобы сделать что-то вроде:

m = getInstance() 
u=m.getuser('x') 
u.doSomething() 

Так что я хотел бы способ написать питона которые будут внутренне вызывать вышеуказанные методы. Я могу написать методы-обертки не объектно-ориентированным способом. то есть: я могу написать его так, чтобы я мог вызывать автономные методы как getUser ('x') и doSomething(), но не на основе объектов m.getUser ('x') и u.doSomething().

ответ

1

Выполняя m = getInstance(), я предполагаю, что вы хотите экземпляр объекта. Определите конструктор для вашего класса. Кроме того, добавить self так, что он вызывает метод от конкретного объекта только

class Manager: 

    def __init__(self, args): 
     self.user_list = [] # list of User 

    def get_user(self, user_name): 
     return User('user_name') # search here instead 


class User: 

    def __init__(self, args): 
     self.args = args 

    def do_something(self): 
     print("doing!") 

m = Manager(1) 
u = m.get_user('x') 
u.do_something() 
+0

На самом деле то, что я хочу, является действительным питон оберткой для вышеприведенных C++ классов на основе. –

+0

Тогда вы можете рассматривать «Менеджер» и «Пользователь», написанные на Python, как обертки классов, написанных на C++. Когда вы можете '' __init__' 'Manager', тогда создайте класс C++ и сохраните его в' Manager', как 'self.instance = c_plus_plus_Manager(). GetInstance()'. – hyades