如何为自定义类进行注释?

问题描述 投票:0回答:1

假设我有一个类

Shard
,并且我的方法的返回值应该是
list
对象的
Shard

my_method(args) -> ??:

当我从

List
导入
typing
并指定
List[Shard]
时,Pycharm 会出现错误(该错误与其无法找到 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
类是在同一模块中定义的。

python pycharm python-typing
1个回答
1
投票

Shard
尚未定义,要么是因为您仍在类定义的中间,要么是因为
Shard
是在此类下面定义的。 以字符串形式给出名称

def _return_shards(self, sql: str = None) -> List['Shard']:
© www.soinside.com 2019 - 2024. All rights reserved.