如何为地图类正确定义__repr__
?
class map(object):
"""Find data folders that could be imported and return as list"""
def __init__(self,height=400,zoom=0):
"""Initialize the map"""
if zoom == 0:
z = get_map_zoom()
else:
z = zoom
self.map = Map(center=get_map_center(), zoom=z)
self.map.layout.height = f'{height}px'
def __repr__(self):
return self.map
def add_layer(self,tableName:str,style_name='default',geomColumn:str = 'geom'):
"""Get GeoJSON data from database and add as layer to map"""
data = db.execute(f'SELECT ST_AsGeojson(ST_Transform({geomColumn},4326)) from {tableName} order by random() limit 5000;')
style = get_style(style_name)
geo_json = GeoJSON(style=style,data={'type': "FeatureCollection", 'features': [json.loads(row[0]) for row in data]})
self.map.add_layer(geo_json)
我从Jupyter生成这样的地图:
from modules import map
m = map.map()
m.add_layer('geo.service_area','service_area')
m.add_layer('rawgeo.ways',geomColumn='the_geom')
display(m)
但是TypeError: __repr__ returned non-string (type Map)
发生display(m)
错误。
如果我改用display(m.map)
,就可以使它工作。
答案 0 :(得分:2)
__repr__
方法必须返回一个字符串。来自the docs(我有些强调):
object.__repr__(self)
由repr()内置函数调用以计算对象的“正式”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(在适当的环境下)。如果这不可能,则应返回格式为<...一些有用的说明...>的字符串。 返回值必须是一个字符串对象。如果某个类定义了
__repr__()
而不是__str__()
,那么当需要该类实例的“非正式”字符串表示形式时,也将使用__repr__()
。
编辑:正如@khelwood建议的那样,您可以使用return repr(self.map)
方法__repr__
。