Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с BoostPythonMetaclass 
:(
    Опции темы
Aliance
Дата 18.9.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Странно, но вот такой код выдает ошибку:

Код

...
# The base Boost.Python class
BoostPythonMetaclass = Coord.__class__

class _injector(object):
    class __metaclass__(BoostPythonMetaclass):
        def __init__(self, name, bases, dict):
            for b in bases:
                if type(b) not in (self, type):
                    for k,v in dict.items():
                        setattr(b,k,v)
            return type.__init__(self, name, bases, dict)

class _Coord(Coord,_injector):
    def __repr__(self):
        return 'Coord(%s,%s)' % (self.x, self.y)
...


Ошибка:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "...test.py", line 19, in <module>
    BoostPythonMetaclass = Coord.__class__
NameError: name 'Coord' is not defined


Помогите.
PM MAIL WWW ICQ Skype   Вверх
Aliance
Дата 20.9.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



В интернете нашел похожую проблему, там решение свелось к удалению лишней пустой строки - не очень понимаю где она. 
PM MAIL WWW ICQ Skype   Вверх
Fenrir13
Дата 21.9.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.9.2008

Репутация: 1
Всего: 2



По ссылке проблема всего лишь в кривых отступах, а не мифических пустых строках.

А в вашем коде не видно, чтобы класс Coord был уже определен на момент строки BoostPythonMetaclass = Coord.__class__ Проверьте, точно ли он описан/подключен ранее.
PM MAIL Jabber   Вверх
Aliance
Дата 21.9.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



В том-то и дело, что он ранее не определен. Но тем ни менее, если написать так:
Код

# The base Boost.Python class
BoostPythonMetaclass = _Coord.__class__

Работать по-прежнему ничего не будет.
PM MAIL WWW ICQ Skype   Вверх
Fenrir13
Дата 21.9.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.9.2008

Репутация: 1
Всего: 2



И что же тут странного? Откуда будет работать то, чего нет? И BoostPythonMetaclass = _Coord.__class__ ты небось тоже пишешь ДО определения _Coord?
PM MAIL Jabber   Вверх
Aliance
Дата 22.9.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Либо я чего-то не понимаю, либо ты ошибаешься.
Смотри сюда, вот рабочий код:
Код

    ##The one Boost.Python uses for all wrapped classes. 
    ##You can use here any class exported by Boost instead of "point"
    BoostPythonMetaclass = point.__class__ 

    class injector(object):
        class __metaclass__(BoostPythonMetaclass):
            def __init__(self, name, bases, dict):
                for b in bases:
                    if type(b) not in (self, type):
                        for k,v in dict.items():
                            setattr(b,k,v)
                return type.__init__(self, name, bases, dict)

    ##inject some methods in the point foo
    class more_point(injector, point):
        def __repr__(self):
            return 'Point(x=%s, y=%s)' % (self.x, self.y)
        def foo(self):
            print 'foo!'

В нем ведь тот же синтаксис - но все работает.
PM MAIL WWW ICQ Skype   Вверх
Fenrir13
Дата 23.9.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.9.2008

Репутация: 1
Всего: 2



Цитата(Aliance @  22.9.2008,  14:59 Найти цитируемый пост)
Смотри сюда, вот рабочий код:

Тобой приведен кусок кода. Он не работает сам по себе. Класс point там берется из кода ранее:
Код
from _geom import *

А где берешь Coord ты?
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.