Понимание наследования классов Python 3 - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь понять наследование классов, перефразируя чужой код, который выглядит следующим образом. В моем понимании наследования путем создания экземпляра класса View у меня есть доступ ко всем методам в доступном для записи классе. Кажется, что это правда.

Когда я устанавливаю setFolder из доступного для записи класса, я знаю, что self.outputFolder имеет значение, потому что в моем классе View я могу вызвать returnFolderView и получить значение из self.outputFolder.

Однако, когда я возвращаю self.path в функцию returnPath, я вместо этого получаю условие else в функции инициализации View. Я не понимаю, почему это происходит.

Я ожидал бы, что self.outputFolder + self.fileName и т. Д., То есть условие if будет истинным.

Это порядок операций? Любая помощь очень ценится.

OUTPUT_DIR = ''
class writeable():
    def __init__(self, *args, **kwargs): 
        self.fileName = 'writeFile'
        self.outputFolder = kwargs.get('output_dir',OUTPUT_DIR)
        if self.outputFolder:
            self.path = self.outputFolder  + self.fileName if self.outputFolder.endswith('/') else self.outputFolder  + '/' +  self.fileName
        else:
            self.path = self.fileName

        # super(writeable, self).__init__(self, *args, **kwargs)

    def setFolder(self,folder):
        self.outputFolder = folder
        return self

    def returnFolder(self):
        return self.outputFolder


class View(writeable):
    def __init__(self, *args, **kwargs):
        super(View, self).__init__(self, *args, **kwargs)
        self.fileName = 'viewFile'
        if self.outputFolder:
            self.path = self.outputFolder  + self.fileName if self.outputFolder.endswith('/') else self.outputFolder  + '/' +  self.fileName
        else:
            self.path = self.fileName

    def returnFolderView(self):
        if self.outputFolder:
            return self.outputFolder
        else:
            print('Failure')

    def returnPath(self):
        return self.path

a = View()
a.setFolder('freddie')
print(a.returnFolderView())
print(a.returnPath())

1 Ответ

0 голосов
/ 12 октября 2019

На основе приведенных выше комментариев @jasonharper обновление метода setFolder для обновления self.path дало желаемое поведение.

OUTPUT_DIR = ''
class writeable():
    def __init__(self, *args, **kwargs): 
        self.fileName = 'writeFile'
        self.outputFolder = kwargs.get('output_dir',OUTPUT_DIR)
        if self.outputFolder:
            self.path = self.outputFolder  + self.fileName if self.outputFolder.endswith('/') else self.outputFolder  + '/' +  self.fileName
        else:
            self.path = self.fileName

    def setFolder(self,folder):
        self.outputFolder = folder
        ## Added this line to update self.path in the init function
        self.path = self.outputFolder + self.fileName
        return self

    def returnFolder(self):
        return self.outputFolder


class View(writeable):
    def __init__(self, *args, **kwargs):
        super(View, self).__init__(self, *args, **kwargs)
        self.fileName = 'viewFile'
        if self.outputFolder:
            self.path = self.outputFolder  + self.fileName if self.outputFolder.endswith('/') else self.outputFolder  + '/' +  self.fileName
        else:
            self.path = self.fileName

    def returnFolderView(self):
        if self.outputFolder:
            return self.outputFolder
        else:
            print('Failure')

    def returnPath(self):
        return self.path

a = View()
a.setFolder('freddie')
print(a.returnFolderView())
print(a.returnPath())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...