2016-05-13 95 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']: