2016-05-13 75 views
0

说我有一个班级,Shard,我的方法的返回值应该是listShard对象。你如何为自定义类注释?

my_method(args) -> ??: 

Pycharm踢了,当我进口Listtyping和指定List[Shard](错误有关,它不能够找到碎片)的错误。

这里是有问题的方法:

def _return_shards(self, sql: str = None) -> List[Shard]: 
     """ 
     Queries the database to return a sequence of all the database clusters 
     and shards, and then creates Shard objects with the information. 

     @type conn_info: dict 
     :param conn_info: Database information containing the host, port, user, 
     database, and password. 
     @type sql: str 

     :return: A list of Shard items 
     """ 
     logging.info('Creating shards.') 
     cursor = self._return_cursor(self.canvas_conn) 

     stock_query = ''' 
       SELECT 
       database_server_id || 'dr' database_server_id 
       , CASE 
        WHEN database_server_id LIKE 'cluster1' AND name IS NULL THEN 'canvas' 
        WHEN database_server_id LIKE 'cluster4' AND name IS NULL THEN 'canvas' 
        WHEN name IS NULL THEN database_server_id 
        ELSE name 
       END AS database_name 
       ,SUBSTRING(database_server_id FROM '\d+$')::INT cluster_id 
       ,CASE 
        WHEN name IS NULL THEN SUBSTRING(database_server_id FROM '\d+$')::INT 
        ELSE SUBSTRING(name FROM '\d+$')::INT 
       END AS shard_id 
       FROM canvas.switchman_shards 
       WHERE database_server_id LIKE 'cluster%' 
       ORDER BY cluster_id, shard_id 
       ''' 
     if sql: 
      cursor.execute(sql) 
     else: 
      cursor.execute(stock_query) 
     results = cursor.fetchall() 
     self._set_reporter_total_shards(count=len(results)) 
     return [Shard(
      *result, 
      job=self.job, 
      manifest=self.manifest, 
      reporter=self.reporter.create_slave(db=result[0], schema=result[1]) 
     ) for result in results] 

该错误是NameError: name 'Shard' is not defined即使Shard类相同的模块中定义。

+0

我无法复制此内容。它需要一个[mcve]。 –

+0

什么错误?范围内是“碎片”吗? – jonrsharpe

+0

我已经添加了问题的方法和错误。 – flybonzai

回答

1

Shard尚未定义,要么是因为您仍然处于类定义的中间,要么是因为Shard定义在此类的下面。 Give the name as a string

def _return_shards(self, sql: str = None) -> List['Shard']: