我想要展示/打印我的Sqlalchemy类,使其看起来整洁明了。
在《Is there a way to auto generate a __str__() implementation in python?》中,答案你可以使用vars、dir等迭代实例属性的方法...对于简单的类很有帮助。
但是当我尝试将其应用于Sqlalchemy类(比如Python's SQLAlchemy入门教程中的类),除了成员变量之外,我还得到了以下条目作为成员变量:
为了完整起见,我也把链接的stackoverflow问题的解决方案放在下面。
如上所述,这是在Python中是否有一种自动生成
在《Is there a way to auto generate a __str__() implementation in python?》中,答案你可以使用vars、dir等迭代实例属性的方法...对于简单的类很有帮助。
但是当我尝试将其应用于Sqlalchemy类(比如Python's SQLAlchemy入门教程中的类),除了成员变量之外,我还得到了以下条目作为成员变量:
_sa_instance_state=<sqlalchemy.orm.state.InstanceState object at 0x000000004CEBCC0>
我该如何避免这个条目出现在__str__表示中?为了完整起见,我也把链接的stackoverflow问题的解决方案放在下面。
import os
import sys
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
# Here we define columns for the table person
# Notice that each column is also a normal Python instance attribute.
id = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
如上所述,这是在Python中是否有一种自动生成
__str__
()实现的方法?的解决方案:def auto_str(cls):
def __str__(self):
return '%s(%s)' % (
type(self).__name__,
', '.join('%s=%s' % item for item in vars(self).items())
)
cls.__str__ = __str__
return cls
@auto_str
class Foo(object):
def __init__(self, value_1, value_2):
self.attribute_1 = value_1
self.attribute_2 = value_2
应用:
>>> str(Foo('bar', 'ping'))
'Foo(attribute_2=ping, attribute_1=bar)'