У меня вопрос по поводу эстетики моего кода. В следующем примере два класса ссылаются друг на друга:
class ClassA:
def convert(self)->ClassB:
return ClassB()
class ClassB:
def convert(self)->ClassA:
return ClassA()
Если я запускаю этот код, я получаю ошибку, так как ClassB
используется перед объявлением:
Traceback (most recent call last):
File "example.py", line 1, in <module>
class ClassA:
File "example.py", line 2, in ClassA
def convert(self)->ClassB:
NameError: name 'ClassB' is not defined
После одного из ответов в { ссылка } я могу использовать Forward Reference
для запуска кода:
class ClassA:
def convert(self)->'ClassB':
return ClassB()
class ClassB:
def convert(self)->ClassA:
return ClassA()
Теперь я не нахожу это очень последовательным. Я мог бы поменять местами объявление ClassA
и ClassB
и получить другую прямую ссылку. В этом примере, хотя это немного некрасиво, но это нормально, я sh и легко поддерживается. Но с десятками прямых ссылок между несколькими классами становится очень трудно управлять прямыми ссылками. В частности, например, если я решу немного изменить рефакторинг и переместить класс в другое место файла модуля.
Чтобы сделать мой код более согласованным и проще в обслуживании, должен ли я везде использовать прямую ссылку, как показано в фрагменте кода ниже? Если да, почему это не поведение по умолчанию в Python? Есть ли основания для не использовать прямые ссылки?
class ClassA:
def convert(self)->'ClassB':
return ClassB()
class ClassB:
def convert(self)->'ClassA':
return ClassA()