Должен ли я использовать прямую ссылку везде, где могу в Python? - PullRequest
0 голосов
/ 09 марта 2020

У меня вопрос по поводу эстетики моего кода. В следующем примере два класса ссылаются друг на друга:

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()
...