Не совсем. У Python нет способа объявить класс, прежде чем вы определяете его, как в C++.
Если вы просто хотите, чтобы люди видели, что rhs
должен быть Foo
, то вы всегда можете использовать строковой литерал:
def __init__(self, rhs: 'Foo'):
# or
def __init__(self, rhs: "<class '__main__.Foo'>"):
Это делает ваши намерения довольно ясно, а также позволяет иметь аннотацию говорить все вы хотите.
Однако, если вы хотите реальную ссылку на Foo
класса внутри атрибута Foo.__init__
__annotations__
, то вам нужно будет вручную изменить этот атрибут после определения класса:
class Foo:
def __init__(self, rhs):
pass
Foo.__init__.__annotations__['rhs'] = Foo
print(Foo.__init__.__annotations__)
# {'rhs': <class '__main__.Foo'>}
Но лично я бы просто использовать первое решение. Основная цель аннотации функций - документировать ваши функции. Таким образом, строковый литерал, который делает это, выполняет цель аннотации.
Несчастная, но я должен дать вам, что один. Я попробовал строчную аннотацию и не очень понравился по нескольким причинам. Я обсуждаю это в отдельном ответе, если другие считают это полезным. – Schollii