Я нахожу множество причуд с Python при создании нового класса. Я уверен, что это только потому, что я не привык к языку, но даже в этом случае поведение, которое я вижу, действительно странно.
Если я открою iPython и наберу следующее:
class Person:
def __init__(self, name):
self.name = name
def hello(self):
print "Hello, " + self.name
Все работает точно так, как я ожидал:
In [2]: Person
Out[2]: <class __main__.Person at 0x1c97330>
In [3]: p = Person("Jamie")
In [4]: p
Out[4]: <__main__.Person instance at 0x1c90b98>
In [5]: p.hello()
Hello, Jamie
Однако, если я получу доступ к отдельному классу внутри пакета - я бы добавил, ничего особенного - и создаю новый класс, все пойдет не так. Вот ссылка на код для palestrina / cache.py
In [6]: from palestrina.cache import Cache
In [7]: Cache
Out[7]: <class palestrina.cache.Cache at 0x1c97750>
In [8]: c = Cache(application = 'example', backend = 'filesystem')
In [9]: c
Out[9]: ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/jamierumbelow/Sites/Os/palestrina/<ipython console> in <module>()
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/IPython/Prompts.pyc in __call__(self, arg)
550
551 # and now call a possibly user-defined print mechanism
--> 552 manipulated_val = self.display(arg)
553
554 # user display hooks can change the variable to be stored in
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/IPython/Prompts.pyc in _display(self, arg)
576 return IPython.generics.result_display(arg)
577 except TryNext:
--> 578 return self.shell.hooks.result_display(arg)
579
580 # Assign the default display method:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/IPython/hooks.pyc in __call__(self, *args, **kw)
139 #print "prio",prio,"cmd",cmd #dbg
140 try:
--> 141 ret = cmd(*args, **kw)
142 return ret
143 except ipapi.TryNext, exc:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/IPython/hooks.pyc in result_display(self, arg)
169
170 if self.rc.pprint:
--> 171 out = pformat(arg)
172 if '\n' in out:
173 # So that multi-line strings line up with the left column of
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pprint.pyc in pformat(self, object)
109 def pformat(self, object):
110 sio = _StringIO()
--> 111 self._format(object, sio, 0, 0, {}, 0)
112 return sio.getvalue()
113
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pprint.pyc in _format(self, object, stream, indent, allowance, context, level)
127 self._readable = False
128 return
--> 129 rep = self._repr(object, context, level - 1)
130 typ = _type(object)
131 sepLines = _len(rep) > (self._width - 1 - indent - allowance)
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pprint.pyc in _repr(self, object, context, level)
221 def _repr(self, object, context, level):
222 repr, readable, recursive = self.format(object, context.copy(),
--> 223 self._depth, level)
224 if not readable:
225 self._readable = False
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pprint.pyc in format(self, object, context, maxlevels, level)
233 and whether the object represents a recursive construct.
234 """
--> 235 return _safe_repr(object, context, maxlevels, level)
236
237
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pprint.pyc in _safe_repr(object, context, maxlevels, level)
318 return format % _commajoin(components), readable, recursive
319
--> 320 rep = repr(object)
321 return rep, (rep and not rep.startswith('<')), False
322
TypeError: 'bool' object is not callable
Я не могу понять, что здесь происходит. Может кто-нибудь объяснить мне, что может происходить?
Спасибо.