2014-11-27 3 views

ответ

1

Не совсем. У 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'>} 

Но лично я бы просто использовать первое решение. Основная цель аннотации функций - документировать ваши функции. Таким образом, строковый литерал, который делает это, выполняет цель аннотации.

+0

Несчастная, но я должен дать вам, что один. Я попробовал строчную аннотацию и не очень понравился по нескольким причинам. Я обсуждаю это в отдельном ответе, если другие считают это полезным. – Schollii

0

Почему бы не проверить в инициализатор:

if (not isinstance(rhs, Foo)): 
    raise Exception('Not the right class!') 
Смежные вопросы