Можно ли определять атрибуты в зависимости от условий в методе __init__ для класса? - PullRequest
0 голосов
/ 12 апреля 2020

Я создал класс, который может быть создан из чтения текстового файла, из преобразования из другого текстового файла или из будущего GUI. Чтобы объяснить ситуацию, я использую простой пример точно такого же случая, но я не объясняю точно такую ​​же ситуацию, чтобы не делать пост слишком длинным или выдавать слишком много информации (возможно, немного глупо, но в этом время, когда я связан NDA).

Чтобы создать экземпляр класса, передается строка с числами, а также целое число, целое число зависит от атрибута экземпляра другого класса, который тесно связан. Если из текстового файла читается '124', а другое значение (целое число) равно 12, то, что должно быть показано в GUI, равно 136 (смещение integer). Изначально я создал класс следующим образом:

class myClass(object):
    def __init__ (self, number, offset):
        self.number = number
        self.offset = offset
        self.displayValue = number + offset

В текстовом файле будет отображаться self.number, а в GUI будет отображаться self.displayValue, и это не будет проблемой. Однако, если этот экземпляр редактируется из GUI (конечно, с помощью метода установки), то будет редактироваться self.displayValue, и number придется изменить в зависимости от этого. Кроме того, при чтении из текстового файла другого типа будет создан экземпляр, но с аргументами, которые вместо этого будут displayValue и offset (в этих двух случаях offset будет отрицательным, поскольку он уже учтен) из которого следует вычислить self.number.

Я видел, что у меня могут быть операторы if в методе init . Однако в моем случае определения атрибутов будут меняться в зависимости от того, где создан экземпляр. Я могу использовать знак аргумента offset, чтобы решить это, но я хотел бы знать, не противоречит ли это наилучшей практике. Кроме того, обратите внимание, что если self.displayValue редактируется с помощью метода установки, следует также изменить self.number, было бы лучше включить обновление для self.number в установщик self.displayValue? Каков наилучший способ сделать это?

PS: Может быть, есть другой способ сделать это с помощью графических интерфейсов, я все еще учусь создавать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...