Python und Django Ich bin im ersten Monat. Die Schienengeschichte beträgt ca. 2 Jahre. Warum ist Pythons Debug so schwer zu sehen? Besonders Modell. Die folgende Anzeige. Wer würde davon profitieren?
>>> class Foo(object):
pass
>>>
>>> repr(Foo())
'<__main__.Foo object at 0x02A74E50>'
Suchen Sie im Netz nach dem Meer, um festzustellen, ob es einen anderen Weg gibt, und verwenden Sie repr, um es wunderschön zu sehen! Hurra! Das befreit dich vom Schmerz!
def __repr__(self):
return '<Stats: description={0.description!r}, mystat={0.mystat!r}>'.format(self)
... was ist das nervig.
Sie müssen an jede Klasse schreiben. Ist es möglich, eine One-Shot-Bibliothek oder etwas hinzuzufügen? ?? Ich denke.
Referenz: http://stackoverflow.com/a/15929677/5114776
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
if __debug__:
# monkey-patch in useful repr() for all objects, but only in dev
def tablerepr(self):
return "<{}({})>".format(
self.__class__.__name__,
', '.join(
["{}={}".format(k, repr(self.__dict__[k]))
for k in sorted(self.__dict__.keys())
if k[0] != '_']
)
)
Base.__repr__ = tablerepr
>>> session.query(FooBar).get(1)
<FooBar(id=1, foo='bar', comments='foobar', hoge=1231242342341342342, fuga=datetime(2015, 5, 5, 5, 5, 5), tiger='waearsdtdygfyfguiohjohjohpp'>
Es ist jedoch immer noch schwierig, mit dieser Referenz allein zu sehen. Ich bin keine Maschine! Ein Format, das für die Leute leicht zu sehen ist! Sonst ist es bedeutungslos!
Base = declarative_base()
if __debug__:
# monkey-patch in useful repr() for all objects, but only in dev
def tab_char(max_length, target_lenght):
tab = []
tab_char_count = 4
tab_count = (max_length/tab_char_count - target_lenght/tab_char_count) + 1
for i in range(tab_count):
tab.append('\t')
return "".join(tab)
def table_repr(self):
max_length = max(map(lambda n: len(n), self.__dict__.keys()))
return "\n<{}({})>".format(
self.__class__.__name__,
', '.join(
["\n\t{}{}= {}".format(k, tab_char(max_length, len(k)), repr(self.__dict__[k]))
for k in sorted(self.__dict__.keys())
if k[0] != '_']
)
)
Base.__repr__ = table_repr
>>> session.query(FooBar).get(1)
<FooBar(
id = 1
fooooooooo = 'bar',
comments = 'foobar',
hoge = 1231242342341342342,
fuga = datetime(2015, 5, 5, 5, 5, 5),
tiger = 'waearsdtdygfyfguiohjohjohpp'>
Perfekt.