LINUX.ORG.RU

(python) можно ли наследовать класс PyObject?


0

0

сабж! делаю так - "class Unit(PyObject)", на что хаваю ругань:

Traceback (most recent call last):
  File "./life.py", line 15, in ?
    class Unit(PyObject):
TypeError: Error when calling the metaclass bases
    str() takes at most 1 argument (3 given)

Не въезжаю даже, что именно ему не нравится :(
★★★

А нафига тебе надо наследовать PyObject?

PyObject это вообще из C API, а ты его используешь в питоновском файле. o_O

Ты лучше скажи чего ты хочешь...

redvasily
()
Ответ на: комментарий от redvasily

Скорее всего то, что я хочу, можно сделать по-другому, просто я тупой :-)

В общем мне нужен полноценный двумерный массив объектов моего класса. Нашёл доку по Numeric, http://www.intuit.ru/department/pl/python/5/1.html, там

>В качестве элементов массива можно использовать следующие типы: Int8-Int32, UnsignedInt8-UnsignedInt32, Float8-Float64, Complex8-Complex64 и PyObject.

И я по-сишному подумал, что если мой класс будет наследником PyObject, то всё будет ок... :)

shuthdar ★★★
() автор топика
Ответ на: комментарий от shuthdar

Попробуй просто object: class Unit(object). Тоже вряд ли получится то. что надо - но по крайней мере это легко попробовать 8)

tailgunner ★★★★★
()
Ответ на: комментарий от shuthdar

In [8]: arr = Numeric.zeros((3, 3), Numeric.PyObject)
In [9]: arr
Out[9]:
array([[0 , 0 , 0 ],
       [0 , 0 , 0 ],
       [0 , 0 , 0 ]],'O')
In [10]: arr[0, 0] = 'Zero-Zero'
In [11]: arr[1, 1] = 'One-One'
In [12]: arr[2, 2] = 'Two-Two'
In [13]: arr
Out[13]:
array([[Zero-Zero , 0 , 0 ],
       [0 , One-One , 0 ],
       [0 , 0 , Two-Two ]],'O')

Элементами массива могут быть любые объекты

redvasily
()

Все new-style classes являются наследниками PyObject/object Т.е. если ты наследуешься либо от object либо от какого то втроенного класса (Int например) которые уже и так наследованны от object'a

imp ★★
()
Ответ на: комментарий от imp

> Все new-style classes являются наследниками PyObject/object Т.е. 
> если ты наследуешься либо от object либо от какого то втроенного 
> класса (Int например) которые уже и так наследованны от object'a

Да ну ты брось, PyObject это любой объект в Питоне, включая old-style 
классы и любую фигню:

In [5]: arr = Numeric.zeros((3, 3), Numeric.PyObject)
In [6]: class Class_:
   ...:     pass
   ...:
In [7]: c = Class_()
In [8]: arr[0, 0] = c
In [9]: arr[1, 1] = 'Old-style classes work fine too'
In [10]: arr
Out[10]:
array([[<__main__.Class_ instance at 0x00A77FA8> ,
             0 ,
             0 ],
       [0 ,
             Old-style classes work fine too ,
             0 ],
       [0 ,
             0 ,
             0 ]],'O')

redvasily
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.